Giới thiệu TreeSet trong Java

TreeSet là một trong những implementation của SortedSet interface được sử dụng phổ biến nhất trong Java sử dụng cấu trúc cây để lưu trữ. Thứ tự các phần tử sẽ được sắp xếp khi thêm vào bằng cách so sánh với các phần tử chứa sẵn trong SortedSet.

Để so sánh các phần tử với nhau TreeSet hoặc là sử dụng thứ tự tự nhiên của các phần tử ví dụ ‘a’ thì bé hơn ‘b’; 1 thì bé hơn 2. Hoặc nếu các object implement Comparator interface thì nó sẽ sử dụng như là trình cung cấp phép tính để so sánh và sắp xếp các phần tử.

Set-TreeSet-SortedSet-In-Java-Collection

Ở 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.

Ví dụ sử dụng TreeSet

Cùng xem ví dụ dưới đây để xem cách sử dung TreeSet.

import java.util.*; 
  
class TreeSetExample { 
  
    public static void main(String[] args) 
    { 
        TreeSet<String> ts1 = new TreeSet<String>(); 
  
        // Elements are added using add() method 
        ts1.add("A"); 
        ts1.add("B"); 
        ts1.add("C"); 
  
        // Duplicates will not get insert 
        ts1.add("C"); 
  
        System.out.println(ts1); 
    } 
}

Output

[A, B, C]

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

TreeSet cung cấp vô số các method phục vụ cho hầu hết các nhu cầu sử dụng của một Set implementation.

Thêm phần tử 

Để thêm phần từ vào TreeSet 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 được chấp nhận trong TreeSet.

import java.util.*; 
  
class GFG { 
  
    public static void main(String[] args) 
    { 
        TreeSet<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]

Note: Tất cả các phần tử của một TreeSet 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ự. 

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 TreeSet.

import java.util.*; 
class GFG { 
  
    public static void main(String[] args) 
    { 
        TreeSet<String> ts 
            = new TreeSet<String>(); 
  
        ts.add("A"); 
        ts.add("B"); 
        ts.add("C"); 
        ts.add("A"); 
  
        System.out.println("TreeSet is " + ts); 
  
        String check = "D"; 

        System.out.println("Contains " + check 
                           + " " + ts.contains(check)); 
  

        System.out.println("First Value " + ts.first()); 
  
        System.out.println("Last Value " + ts.last()); 
    } 
}

Output

TreeSet 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 TreeSet khi chúng ta gọi remove() method.

import java.util.*; 
class GFG{ 
  
    public static void main(String[] args) 
    { 
        TreeSet<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]

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, TreeSet 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

https://www.geeksforgeeks.org/treeset-in-java-with-examples/

0 0 vote
Article Rating
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x