Trong lập trình Java, SortedMap
là một giao diện (interface) nằm trong gói java.util
. SortedMap
là một phần mở rộng của giao diện Map
, và nó đại diện cho một tập hợp các cặp key-value không có thứ tự (unordered) và không chứa các key trùng lặp, nhưng các key được sắp xếp theo thứ tự tăng dần (ascending order) hoặc giảm dần (descending order).
SortedMap
cung cấp các phương thức để thực hiện các hoạt động liên quan đến việc duyệt và truy xuất các cặp key-value theo thứ tự. Các key trong SortedMap
phải là các đối tượng có thể so sánh với nhau bằng cách sử dụng một trình so sánh (comparator) hoặc phải có khả năng so sánh tự nhiên (implement Comparable
interface).
Dưới đây là một số phương thức quan trọng của giao diện SortedMap
:
Comparator<? super K> comparator()
: Trả về trình so sánh được sử dụng để sắp xếp các key trongSortedMap
. NếuSortedMap
sử dụng trình so sánh tự nhiên, phương thức này trả vềnull
.SortedMap<K, V> subMap(K fromKey, K toKey)
: Trả về mộtSortedMap
con chứa các cặp key-value nằm giữafromKey
vàtoKey
, không bao gồmtoKey
.SortedMap<K, V> headMap(K toKey)
: Trả về mộtSortedMap
con chứa các cặp key-value có key nhỏ hơntoKey
.SortedMap<K, V> tailMap(K fromKey)
: Trả về mộtSortedMap
con chứa các cặp key-value có key lớn hơn hoặc bằngfromKey
.K firstKey()
: Trả về key đầu tiên trongSortedMap
.K lastKey()
: Trả về key cuối cùng trongSortedMap
.
Các lớp cụ thể trong Java như TreeMap
đều triển khai giao diện SortedMap
. TreeMap
là một lớp tập hợp dựa trên cây (red-black tree) sắp xếp các key theo thứ tự tăng dần hoặc giảm dần.
Dưới đây là ví dụ về cách sử dụng giao diện SortedMap
và lớp cụ thể TreeMap
:
java
import java.util.SortedMap;
import java.util.TreeMap;
public class SortedMapExample {
public static void main(String[] args) {
SortedMap<String, Integer> scores = new TreeMap<>();
// Thêm các cặp key-value vào SortedMap
scores.put("Alice", 85);
scores.put("Bob", 90);
scores.put("Charlie", 78);
// Duyệt qua các cặp key-value trong SortedMap
for (String name : scores.keySet()) {
int score = scores.get(name);
System.out.println(name + " - " + score);
}
/* Output:
Alice - 85
Bob - 90
Charlie - 78
*/
// Trả về SortedMap con chứa các cặp key-value từ Alice đến Charlie (không bao gồm Charlie)
SortedMap<String, Integer> subMap = scores.subMap("Alice", "Charlie");
System.out.println("Subset map: " + subMap);
// Output: Subset map: {Alice=85, Bob=90}
// Trả về key đầu tiên và key cuối cùng trong SortedMap
String firstKey = scores.firstKey();
String lastKey = scores.lastKey();
System.out.println("First key: " + firstKey); // Output: First key: Alice
System.out.println("Last key: " + lastKey); // Output: Last key: Charlie
}
}
Trong ví dụ trên, chúng ta sử dụng SortedMap
để quản lý các cặp key-value được sắp xếp theo thứ tự. Chúng ta sử dụng phương thức keySet()
để duyệt qua các key và get()
để truy cập giá trị tương ứng với mỗi key. Bên cạnh đó, chúng ta sử dụng các phương thức subMap()
, firstKey()
, và lastKey()
để truy xuất các tập hợp con và key đầu tiên và key cuối cùng trong SortedMap
.