Interface SortedMap<K,V>
SortedMap<K,V> là một interface trong Java, kế thừa từ interface Map<K,V>, và nó cung cấp thêm khả năng sắp xếp các khóa trong map giúp việc quản lý và truy xuất dữ liệu theo thứ tự sắp xếp trở nên dễ dàng hơn. Các khóa trong SortedMap phải có khả năng so sánh, và SortedMap hỗ trợ một số phương thức đặc biệt để làm việc với các khoảng con của map.
SortedMap sắp xếp theo gì?
↳ Có thể sắp xếp theo thứ tự tự nhiên của các khóa (nếu các khóa implements interface Comparable). Hoặc theo một bộ so sánh (Comparator) được cung cấp khi khởi tạo SortedMap.
Các yêu cầu đối với khóa trong SortedMap
↳ Tất cả các khóa được thêm vào SortedMap phải implements interface Comparable, hoặc phải được chấp nhận bởi Comparator đã chỉ định. Điều này đảm bảo rằng các khóa có thể được so sánh và sắp xếp mà không gây ra ngoại lệ ClassCastException.
↳ Tương thích với equals: Thứ tự sắp xếp của SortedMap phải tương thích với phương thức equals. Điều này có nghĩa là nếu hai khóa được coi là bằng nhau theo compareTo() hoặc compare(), thì chúng cũng phải bằng nhau theo equals().
Khai báo Interface SortedMap<K,V> trong Java
Để sử dụng Interface SortedMap<K,V>, bạn cần import gói java.util vào đầu file Java của mình.
Cú pháp câu lệnh import:
Cú pháp
import java.util.SortedMap;
Cú pháp khai báo Interface SortedMap<K,V>:
Cú pháp
public interface SortedMap<K,V>
extends Map<K,V>
Dưới đây là giải thích chi tiết về cú pháp khai báo này:
↳ public: Interface SortedMap có thể được truy cập từ bất kỳ đâu trong chương trình.
↳ interface: Khai báo một interface – nghĩa là chỉ định ra các phương thức mà lớp cài đặt nó phải thực hiện.
↳ SortedMap<K,V>: Tên interface là SortedMa. SortedMap là một interface trong Java. Interface là một loại lớp trừu tượng hoàn toàn, định nghĩa các phương thức mà một lớp phải triển khai nếu nó kế thừa (implements) interface này. K và V là các Tham số Kiểu (Type Parameters): K đại diện cho kiểu dữ liệu của khóa (key) trong bản đồ (map). V đại diện cho kiểu dữ liệu của giá trị (value) trong bản đồ.
↳ extends Map<K,V>: SortedMap kế thừa từ interface Map<K,V>. Điều này có nghĩa là SortedMap thừa hưởng tất cả các phương thức của interface Map, đồng thời mở rộng thêm các phương thức cụ thể để hỗ trợ sắp xếp các phần tử dựa trên khóa.
Các phương thức chính trong giao diện SortedMap
Giao diện SortedMap là một giao diện con của Map, nó cung cấp các phương thức để thao tác với các bản đồ đã sắp xếp, bao gồm lấy khóa đầu tiên, cuối cùng và các phần của bản đồ dựa trên phạm vi khóa. Dưới đây là danh sách tất cả các phương thức của interface SortedMap<K,V> trong Java:
↳ Comparator<? super K> comparator(): Trả về bộ so sánh được sử dụng để sắp xếp các khóa trong bản đồ này, hoặc null nếu bản đồ này sử dụng thứ tự tự nhiên của các khóa của nó.
↳ Set<Map.Entry<K,V>> entrySet: Trả về một view Set của các ánh xạ có trong bản đồ này.
↳ K firstKey(): Trả về khóa đầu tiên (thấp nhất) hiện có trong bản đồ này.
↳ SortedMap<K,V> headMap(K toKey): Trả về một view của phần của bản đồ này có các khóa nhỏ hơn strictly toKey.
↳ Set<K> keySet(): Trả về một view Set của các khóa có trong bản đồ này.
↳ K lastKey(): Trả về khóa cuối cùng (cao nhất) hiện có trong bản đồ này.
↳ SortedMap<K,V> subMap(K fromKey, K toKey): Trả về một view của phần của bản đồ này có các khóa trong khoảng từ fromKey (bao gồm) đến toKey (không bao gồm).
↳ SortedMap<K,V> tailMap(K fromKey): Trả về một view của phần của bản đồ này có các khóa lớn hơn hoặc bằng fromKey.
↳ Collection<V> values(): Trả về một view Collection của các giá trị có trong bản đồ này.
Dưới đây là một ví dụ về cách sử dụng một số phương thức quan trọng của giao diện SortedMap trong một lớp Java duy nhất. Giao diện SortedMap cung cấp các phương thức bổ sung để làm việc với các bản đồ đã được sắp xếp theo thứ tự tự nhiên của các khóa hoặc theo một bộ so sánh được chỉ định.
Ví dụ: Example.java
import java.util.SortedMap;
import java.util.TreeMap;
public class Example {
public static void main(String[] args) {
// Tạo một TreeMap, là một implementation của SortedMap
SortedMap<String, Integer> sortedMap = new TreeMap<>();
// 1. put(K key, V value) - Thêm một cặp khóa-giá trị vào Map
sortedMap.put("Banana", 20);
sortedMap.put("Apple", 10);
sortedMap.put("Mango", 40);
sortedMap.put("Orange", 30);
// 2. firstKey() - Trả về khóa đầu tiên (nhỏ nhất) trong SortedMap
String firstKey = sortedMap.firstKey();
System.out.println("Khóa đầu tiên: " + firstKey);
// 3. lastKey() - Trả về khóa cuối cùng (lớn nhất) trong SortedMap
String lastKey = sortedMap.lastKey();
System.out.println("Khóa cuối cùng: " + lastKey);
// 4. headMap(K toKey) - Trả về một SortedMap chứa các mục có khóa nhỏ hơn khóa chỉ định
SortedMap<String, Integer> headMap = sortedMap.headMap("Mango");
System.out.println("HeadMap (nhỏ hơn 'Mango'): " + headMap);
// 5. tailMap(K fromKey) - Trả về một SortedMap chứa các mục có khóa lớn hơn hoặc bằng khóa chỉ định
SortedMap<String, Integer> tailMap = sortedMap.tailMap("Mango");
System.out.println("TailMap (lớn hơn hoặc bằng 'Mango'): " + tailMap);
// 6. subMap(K fromKey, K toKey) - Trả về một SortedMap chứa các mục với khóa từ fromKey (bao gồm) đến toKey (không bao gồm)
SortedMap<String, Integer> subMap = sortedMap.subMap("Apple", "Orange");
System.out.println("SubMap (từ 'Apple' đến 'Orange'): " + subMap);
// 7. comparator() - Trả về bộ so sánh được sử dụng để sắp xếp các khóa, hoặc null nếu sử dụng thứ tự tự nhiên
if (sortedMap.comparator() == null) {
System.out.println("SortedMap đang sử dụng thứ tự tự nhiên.");
} else {
System.out.println("SortedMap đang sử dụng một bộ so sánh tùy chỉnh.");
}
}
}
Kết quả của chương trình là:
Khóa cuối cùng: Orange
HeadMap (nhỏ hơn 'Mango'): {(Apple = 10), (Banana = 20)}
TailMap (lớn hơn hoặc bằng 'Mango'): {(Mango = 40), (Orange = 30)}
SubMap (từ 'Apple' đến 'Orange'): {(Apple = 10), (Banana = 20), (Mango = 40)}
SortedMap đang sử dụng thứ tự tự nhiên.
Chương trình trên minh họa cách sử dụng các phương thức của giao diện SortedMap để làm việc với một bản đồ đã sắp xếp theo khóa. Lớp TreeMap được sử dụng để triển khai SortedMap và các phần tử trong bản đồ được tự động sắp xếp theo thứ tự từ điển của các khóa (String). Các phương thức như firstKey(), lastKey(), headMap(), tailMap(), và subMap() cho phép bạn truy xuất các phần tử dựa trên thứ tự của khóa, giúp việc thao tác trên bản đồ đã sắp xếp trở nên dễ dàng và hiệu quả.
Như vậy, chúng ta đã khám phá các phương thức chính của giao diện SortedMap. Với khả năng duy trì các cặp khóa-giá trị theo thứ tự đã sắp xếp, cùng với các phương thức tiện lợi để lấy khóa đầu tiên, cuối cùng hay trích xuất các phạm vi con, SortedMap là công cụ lý tưởng khi bạn cần một bản đồ có trật tự và khả năng truy vấn dựa trên phạm vi khóa. Nắm vững SortedMap sẽ giúp bạn quản lý dữ liệu theo thứ tự một cách hiệu quả và linh hoạt hơn trong các ứng dụng Java.