Giới thiệu NavigableSet trong Java với ví dụ cụ thể

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.

Khởi tạo NavigableSet

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

Thao tác cơ bản trên NavigableSet

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

https://www.geeksforgeeks.org/navigableset-java-examples/

Leave a Comment

Your email address will not be published. Required fields are marked *