Mục lục
NavigableSet interface là một trong những thành của collection framework, kế thừa từ SortedSet thế nên nó có đầy đủ các tính chất của SortedSet như các phần tử không trùng lặp và được sắp sếp. Ngoài ra NavigableSet cung cấp thêm một tính năng cho phép điều chỉnh thứ tự sắp xếp các phần tử tăng hoặc giảm dần.
Vì NavigableSet 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.
import java.util.NavigableSet; import java.util.TreeSet; public class NavigableSetDemo { public static void main(String[] args) { NavigableSet<Integer> ns = new TreeSet<>(); ns.add(0); ns.add(1); ns.add(2); ns.add(3); ns.add(4); ns.add(5); ns.add(6); // Get a reverse view of the navigable set NavigableSet<Integer> reverseNs = ns.descendingSet(); // Print the normal and reverse views System.out.println("Normal order: " + ns); System.out.println("Reverse order: " + reverseNs); NavigableSet<Integer> threeOrMore = ns.tailSet(3, true); System.out.println("3 or more: " + threeOrMore); System.out.println("lower(3): " + ns.lower(3)); System.out.println("floor(3): " + ns.floor(3)); System.out.println("higher(3): " + ns.higher(3)); System.out.println("ceiling(3): " + ns.ceiling(3)); System.out.println("pollFirst(): " + ns.pollFirst()); System.out.println("Navigable Set: " + ns); System.out.println("pollLast(): " + ns.pollLast()); System.out.println("Navigable Set: " + ns); System.out.println("pollFirst(): " + ns.pollFirst()); System.out.println("Navigable Set: " + ns); System.out.println("pollFirst(): " + ns.pollFirst()); System.out.println("Navigable Set: " + ns); System.out.println("pollFirst(): " + ns.pollFirst()); System.out.println("Navigable Set: " + ns); System.out.println("pollFirst(): " + ns.pollFirst()); System.out.println("pollLast(): " + ns.pollLast()); } }
Output
Normal order: [0, 1, 2, 3, 4, 5, 6] Reverse order: [6, 5, 4, 3, 2, 1, 0] 3 or more: [3, 4, 5, 6] lower(3): 2 floor(3): 3 higher(3): 4 ceiling(3): 3 pollFirst(): 0 Navigable Set: [1, 2, 3, 4, 5, 6] pollLast(): 6 Navigable Set: [1, 2, 3, 4, 5] pollFirst(): 1 Navigable Set: [2, 3, 4, 5] pollFirst(): 2 Navigable Set: [3, 4, 5] pollFirst(): 3 Navigable Set: [4, 5] pollFirst(): 4 pollLast(): 5
Chúng ta có thể sử dụng tất cả các method từ một NavigableSet 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 NavigableSet.
Để thêm phần từ vào NavigableSet 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 NavigableSet .
import java.util.*; import java.io.*; class NavigableSetDemo { public static void main(String[] args) { NavigableSet<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 NavigableSet .
import java.util.*; import java.io.*; class NavigableSetDemo { public static void main(String[] args) { NavigableSet<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("Navigable Set is " + ts); String check = "D"; // Check if the above string exists in // the NavigableSet or not System.out.println("Contains " + check + " " + ts.contains(check)); // Print the first element in // the NavigableSet System.out.println("First Value " + ts.first()); // Print the last element in // the NavigableSet System.out.println("Last Value " + ts.last()); } }
Output
Navigable Set is [A, B, C] Contains D false First Value A Last Value C
Xoá phần tử
Chúng ta có thể một phần tử trong NavigableSet bằng cách sử dụng các method remove(), pollFirst() và pollLast().
import java.util.*; import java.io.*; class NavigableSetDemo { public static void main(String[] args) { NavigableSet<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 NavigableSet" + ts); // Removing the element b ts.remove("B"); System.out.println("After removing element " + ts); // Remove the First element of NavigableSet ts.pollFirst(); System.out.println( "After the removal of First Element " + ts); // Remove the Last element of NavigableSet ts.pollLast(); System.out.println( "After the removal of Last Element " + ts); } }
Output
Initial NavigableSet [A, B, C, D, E] After removing element [A, C, D, E] After the removal of First Element [C, D, E] After the removal of Last Element [C, D]
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.*; import java.io.*; class NavigableSetDemo { public static void main(String[] args) { NavigableSet<String> ts = new TreeSet<String>(); // 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 NavigableSet 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, NavigableSet giúp lưu trữ các phần tử không trùng lặp. sắp xếp tăng dần hoặc giảm dần.
Nguồn tham khảo