Mục lục
SortedSet interface chứa trong gói java.util, thừa kế từ Set interface. Ngoài cơ chế đảm bảo các phần tử không trùng lặp, nó còn sắp xếp theo thứ tự tăng dần.
Ở bức hình trên, NavigableSet thừa kế từ SortedSet interface. Bởi vì các phần tử trong Set không có thứ tự. NavigableSet cung cấp các method cho việc triển khai Set trong đó các phần tử được sắp xếp theo thứ tự tăng dần.
import java.util.*; class SortedSetExample{ public static void main(String[] args) { SortedSet<String> ts = new TreeSet<String>(); // Adding elements into the TreeSet // using add() ts.add("India"); ts.add("Australia"); ts.add("South Africa"); // Adding the duplicate // element ts.add("India"); // Displaying the TreeSet System.out.println(ts); // Removing items from TreeSet // using remove() ts.remove("Australia"); System.out.println("Set after removing " + "Australia:" + ts); // Iterating over Tree set items System.out.println("Iterating over set:"); Iterator<String> i = ts.iterator(); while (i.hasNext()) System.out.println(i.next()); } }
Output
[Australia, India, South Africa] Set after removing Australia:[India, South Africa] Iterating over set: India South Africa
Note: Tất cả các phần tử của một SortedSet phải implement từ Comparable interface hoặc được Comparator chấp nhận (các phần tử có thứ tự tự nhiên là int, long, char, etc) vì tất cả chúng đều được đem đi so sánh để sắp xếp theo thứ tự.
Khởi tạo SortedSet
Vì SortedSet là một interface nên chúng ta không thể khởi tạo một object từ nó mà phải thông qua một implementation chẳng hạn như TreeSet.
Thao tác cơ bản trên SortedSet
Chúng ta có thể sử dụng tất cả các method từ một SortedSet implementation thông qua instance được khởi tạo. Dưới đây là một số thao tác cơ bản với SortedSet.
SortedSet<Obj> set = new TreeSet<Obj> ();
Thêm phần tử
Để thêm phần từ vào SortedSet chúng ta có thể sử dụng add() method. Tuy nhiên lưu ý rằng thứ tự thêm sẽ không được đảm bảo thay vào đó, khi mỗi phần tử được thêm vào chúng sẽ được đem đi so sánh và sắp xếp theo giá trị tăng dần.
Một điều nữa đáng chú ý là những phần tử trùng lặp sẽ bị loại bỏ và phần tử null không được chấp nhận trong SortedSet.
import java.util.*; class GFG { public static void main(String[] args) { SortedSet<String> ts = new TreeSet<String>(); // Elements are added using add() method ts.add("A"); ts.add("B"); ts.add("C"); ts.add("A"); System.out.println(ts); } }
Output
[A, B, C]
Truy xuất phần tử
Có một số phương thức phổ biến contains(), first() và last() etc dùng để truy xuất các phần tử trong SortedSet.
import java.util.*; class GFG { public static void main(String[] args) { SortedSet<String> ts = new TreeSet<String>(); // Elements are added using add() method ts.add("A"); ts.add("B"); ts.add("C"); ts.add("A"); System.out.println("Sorted Set is " + ts); String check = "D"; // Check if the above string exists in // the SortedSet or not System.out.println("Contains " + check + " " + ts.contains(check)); // Print the first element in // the SortedSet System.out.println("First Value " + ts.first()); // Print the last element in // the SortedSet System.out.println("Last Value " + ts.last()); } }
Output
Sorted Set is [A, B, C] Contains D false First Value A Last Value C
Xoá phần tử
Một phần tử sẽ bị xoá khỏi SortedSet khi chúng ta gọi remove() method.
import java.util.*; class GFG{ public static void main(String[] args) { SortedSet<String> ts = new TreeSet<String>(); // Elements are added using add() method ts.add("A"); ts.add("B"); ts.add("C"); ts.add("B"); ts.add("D"); ts.add("E"); System.out.println("Initial TreeSet " + ts); // Removing the element b ts.remove("B"); System.out.println("After removing element " + ts); } }
Output
Initial TreeSet [A, B, C, D, E] After removing element [A, C, D, E]
Duyệt phần tử
Hiển nhiên là tất cả các collection đều có thể duyệt thông qua các vòng lặp như for, hoặc có thể sử dụng Stream API để duyệt.
import java.util.*; class GFG { public static void main(String[] args) { SortedSet<String> ts = new TreeSet<>(); // Elements are added using add() method ts.add("C"); ts.add("D"); ts.add("E"); ts.add("A"); ts.add("B"); ts.add("Z"); // Iterating though the SortedSet for (String value : ts) System.out.print(value + ", "); System.out.println(); } }
Output
A, B, C, D, E, Z,
Tóm lược
Qua bài viết chúng ta đã tìm hiểu được thêm một thành phần trong collection framework, SortedSet giúp lưu trữ các phần tử không trùng lặp. sắp xếp tăng dần.
Nguồn tham khảo