Tự học Java | TreeSet trong Java » https://final-blade.com

Trong hướng dẫn này, tất cả chúng ta sẽ tìm hiểu và khám phá về lớp TreeSet trong Java và những hoạt động giải trí và phương pháp khác nhau của nó với sự trợ giúp của những ví dụ .

Các lớp TreeSet của framework collection trong Java cung cấp các hàm của một cấu trúc dữ liệu tree.

Nó lan rộng ra NavigableSet interface .

1. Tạo TreeSet

Để tạo một tập hợp tree, java.util. TreeSet thứ nhất tất cả chúng ta phải nhập gói .
Sau khi tất cả chúng ta nhập gói, đây là cách tất cả chúng ta hoàn toàn có thể tạo một TreeSet trong Java .

TreeSet numbers = new TreeSet<>();

Ở đây, tất cả chúng ta đã tạo một TreeSe mà không có bất kể đối số nào. Trong trường hợp này, những thành phần trong TreeSet được sắp xếp tự nhiên ( thứ tự tăng dần ) .
Tuy nhiên, tất cả chúng ta hoàn toàn có thể tùy chỉnh việc sắp xếp những thành phần bằng cách sử dụng Comparator interface. Chúng ta sẽ khám phá về nó ở phần sau trong hướng dẫn này .

2. Phương thức của TreeSet

Các lớp TreeSet cung ứng phương pháp khác nhau mà được cho phép tất cả chúng ta thực thi những hoạt động giải trí khác nhau trên tree .

3. Chèn các phần tử vào TreeSet

  • add() – chèn phần tử được chỉ định vào tập hợp
  • addAll() – chèn tất cả các phần tử của tập hợp được chỉ định vào tập hợp

Ví dụ ,

import java.util.TreeSet;

class Main {
    public static void main(String[] args) {

        TreeSet evenNumbers = new TreeSet<>();

        // Using the add() method
        evenNumbers.add(2);
        evenNumbers.add(4);
        evenNumbers.add(6);
        System.out.println("TreeSet: " + evenNumbers);

        TreeSet numbers = new TreeSet<>();
        numbers.add(1);

        // Using the addAll() method
        numbers.addAll(evenNumbers);
        System.out.println("New TreeSet: " + numbers);
    }
}

Đầu ra

TreeSet: [2, 4, 6]
New TreeSet: [1, 2, 4, 6]

4. Truy cập phần tử TreeSet

Để truy vấn những thành phần của một tập cây, tất cả chúng ta hoàn toàn có thể sử dụng iterator ( ) phương pháp. Để sử dụng phương pháp này, tất cả chúng ta phải nhập gói java.util. Iterator. Ví dụ ,

/*
Cafedev.vn - Kênh thông tin IT hàng đầu Việt Nam
@author cafedevn
Contact: [email protected]
Fanpage: https://www.facebook.com/cafedevn
Group: https://www.facebook.com/groups/cafedev.vn/
Instagram: https://instagram.com/cafedevn
Twitter: https://twitter.com/CafedeVn
Linkedin: https://www.linkedin.com/in/cafe-dev-407054199/
Pinterest: https://www.pinterest.com/cafedevvn/
YouTube: https://www.youtube.com/channel/UCE7zpY_SlHGEgo67pHxqIoA/
*/

import java.util.TreeSet;
import java.util.Iterator;

class Main {
    public static void main(String[] args) {
        TreeSet numbers = new TreeSet<>();
        numbers.add(2);
        numbers.add(5);
        numbers.add(6);
        System.out.println("TreeSet: " + numbers);

        // Calling iterator() method
        Iterator iterate = numbers.iterator();
        System.out.print("TreeSet using Iterator: ");
        // Accessing elements
        while(iterate.hasNext()) {
            System.out.print(iterate.next());
            System.out.print(", ");
        }
    }
}

Đầu ra

TreeSet: [2, 5, 6]
TreeSet using Iterator: 2, 5, 6,

5. Xóa các phần tử

  • remove() – xóa phần tử được chỉ định khỏi tập hợp
  • removeAll() – xóa tất cả các phần tử khỏi tập hợp

Ví dụ ,

import java.util.TreeSet;

class Main {
    public static void main(String[] args) {
        TreeSet numbers = new TreeSet<>();
        numbers.add(2);
        numbers.add(5);
        numbers.add(6);
        System.out.println("TreeSet: " + numbers);

        // Using the remove() method
        boolean value1 = numbers.remove(5);
        System.out.println("Is 5 removed? " + value1);

        // Using the removeAll() method
        boolean value2 = numbers.removeAll(numbers);
        System.out.println("Are all elements removed? " + value2);
    }
}

Đầu ra

TreeSet: [2, 5, 6]
Is 5 removed? true
Are all elements removed? true

6. Phương pháp điều hướng

Vì lớp TreeSet thực thi NavigableSet, nó cung ứng những phương pháp khác nhau để điều hướng qua những thành phần của tập cây .

6.1. phương pháp first ( ) và last ( )

  • first() – trả về phần tử đầu tiên của tập hợp
  • last() – trả về phần tử cuối cùng của tập hợp

Ví dụ ,

import java.util.TreeSet;

class Main {
    public static void main(String[] args) {
        TreeSet numbers = new TreeSet<>();
        numbers.add(2);
        numbers.add(5);
        numbers.add(6);
        System.out.println("TreeSet: " + numbers);

        // Using the first() method
        int first = numbers.first();
        System.out.println("First Number: " + first);

        // Using the last() method
        int last = numbers.last();
        System.out.println("Last Number: " + last);
    }
}

Đầu ra

TreeSet: [2, 5, 6]
First Number: 2
Last Number: 6

6.2. Phương thức ceiling ( ), floor ( ), higher ( ) and lower ( )

  • higher(element)- Trả về phần tử thấp nhất trong số các phần tử lớn hơn giá trị được chỉ định element.
  • lower(element) – Trả về phần tử lớn nhất trong số các phần tử nhỏ hơn giá trị được chỉ định element.
  • ceiling(element) – Trả về phần tử thấp nhất trong số các phần tử lớn hơn giá trị đã chỉ định thành phần. Nếu element được truyền tồn tại trong một tập hợp cây, nó trả về giá trị element được truyền dưới dạng đối số.
  • floor(element) – Trả về phần tử lớn nhất trong số các phần tử nhỏ hơn giá trị được chỉ định element. Nếu element được truyền tồn tại trong một tập hợp cây, nó trả về giá trị element được truyền dưới dạng đối số.

Ví dụ ,

/*
Cafedev.vn - Kênh thông tin IT hàng đầu Việt Nam
@author cafedevn
Contact: [email protected]
Fanpage: https://www.facebook.com/cafedevn
Group: https://www.facebook.com/groups/cafedev.vn/
Instagram: https://instagram.com/cafedevn
Twitter: https://twitter.com/CafedeVn
Linkedin: https://www.linkedin.com/in/cafe-dev-407054199/
Pinterest: https://www.pinterest.com/cafedevvn/
YouTube: https://www.youtube.com/channel/UCE7zpY_SlHGEgo67pHxqIoA/
*/

import java.util.TreeSet;

class Main {
    public static void main(String[] args) {
        TreeSet numbers = new TreeSet<>();
        numbers.add(2);
        numbers.add(5);
        numbers.add(4);
        numbers.add(6);
        System.out.println("TreeSet: " + numbers);

        // Using higher()
        System.out.println("Using higher: " + numbers.higher(4));

        // Using lower()
        System.out.println("Using lower: " + numbers.lower(4));

        // Using ceiling()
        System.out.println("Using ceiling: " + numbers.ceiling(4));

        // Using floor()
        System.out.println("Using floor: " + numbers.floor(3));

    }
}

Đầu ra

TreeSet: [2, 4, 5, 6]
Using higher: 5
Using lower: 2
Using ceiling: 4
Using floor: 2

6.3. Phương thức thăm dò pollFirst ​ ​ ( ) và pollLast ​ ​ ( )

  • pollFirst() – trả về và xóa phần tử đầu tiên khỏi tập hợp
  • pollLast() – trả về và xóa phần tử cuối cùng khỏi tập hợp

Ví dụ ,

import java.util.TreeSet;

class Main {
    public static void main(String[] args) {
        TreeSet numbers = new TreeSet<>();
        numbers.add(2);
        numbers.add(5);
        numbers.add(4);
        numbers.add(6);
        System.out.println("TreeSet: " + numbers);

        // Using pollFirst()
        System.out.println("Removed First Element: " + numbers.pollFirst());

        // Using pollLast()
        System.out.println("Removed Last Element: " + numbers.pollLast());

        System.out.println("New TreeSet: " + numbers);
    }
}

Đầu ra

TreeSet: [2, 4, 5, 6]
Removed First Element: 2
Removed Last Element: 6
New TreeSet: [4, 5]

6.4. Phương thức headSet ( ), tailSet ( ) và subSet ( )

headSet (phần tử, booleanValue)

phương pháp headSet ( ) trả về tổng thể những yếu tố của một bộ cây trước khi pháp luật thành phần ( được chuyển như một đối số ) .
tham số booleanValue là tùy chọn. Giá trị mặc định của nó là false .
Nếu true được trải qua dưới dạng booleanValue, phương pháp trả về toàn bộ những thành phần trước thành phần được chỉ định gồm có thành phần được chỉ định .
Ví dụ ,

import java.util.TreeSet;

class Main {
    public static void main(String[] args) {
        TreeSet numbers = new TreeSet<>();
        numbers.add(2);
        numbers.add(5);
        numbers.add(4);
        numbers.add(6);
        System.out.println("TreeSet: " + numbers);

        // Using headSet() with default boolean value
        System.out.println("Using headSet without boolean value: " + numbers.headSet(5));

        // Using headSet() with specified boolean value
        System.out.println("Using headSet with boolean value: " + numbers.headSet(5, true));
    }
}

Đầu ra

TreeSet: [2, 4, 5, 6]
Using headSet without boolean value: [2, 4]
Using headSet with boolean value: [2, 4, 5]

tailSet (phần tử, booleanValue)

phương pháp tailSet ( ) trả về toàn bộ những yếu tố của một bộ cây sau khi lao lý thành phần ( được truyền dưới dạng tham số ) gồm có thành phần .
tham số booleanValue là tùy chọn. Giá trị mặc định của nó là true .
Nếu false được trải qua dưới dạng booleanValue, phương pháp trả về toàn bộ những thành phần sau thành phần mà không gồm có những thành phần .
Ví dụ ,

import java.util.TreeSet;

class Main {
    public static void main(String[] args) {
        TreeSet numbers = new TreeSet<>();
        numbers.add(2);
        numbers.add(5);
        numbers.add(4);
        numbers.add(6);
        System.out.println("TreeSet: " + numbers);

        // Using tailSet() with default boolean value
        System.out.println("Using tailSet without boolean value: " + numbers.tailSet(4));

        // Using tailSet() with specified boolean value
        System.out.println("Using tailSet with boolean value: " + numbers.tailSet(4, false));
    }
}

Đầu ra

TreeSet: [2, 4, 5, 6]
Using tailSet without boolean value: [4, 5, 6]
Using tailSet with boolean value: [5, 6]

subSet (e1, bv1, e2, bv2)

phương pháp subSet ( ) trả về toàn bộ những yếu tố giữa e1 và e2 kể cả e1 .
Các bv1 và bv2là những tham số tùy chọn. Giá trị mặc định củabv1là true, và giá trị mặc định củabv2là false .
Nếu false được truyền vào bv1, phương pháp trả về toàn bộ những thành phần giữa e1 và e2 mà không gồm có e1 .
Nếu true được truyền vào là bv2, phương pháp trả về toàn bộ những thành phần giữa e1 và e2, kể cả e1 .
Ví dụ ,

import java.util.TreeSet;

class Main {
    public static void main(String[] args) {
        TreeSet numbers = new TreeSet<>();
        numbers.add(2);
        numbers.add(5);
        numbers.add(4);
        numbers.add(6);
        System.out.println("TreeSet: " + numbers);

        // Using subSet() with default boolean value
        System.out.println("Using subSet without boolean value: " + numbers.subSet(4, 6));

        // Using subSet() with specified boolean value
        System.out.println("Using subSet with boolean value: " + numbers.subSet(4, false, 6, true));
    }
}

Đầu ra

TreeSet: [2, 4, 5, 6]
Using subSet without boolean value: [4, 5]
Using subSet with boolean value: [5, 6]

7. Hoạt động của Set

Các phương pháp của lớp TreeSet cũng hoàn toàn có thể được sử dụng để triển khai những hoạt động giải trí tập hợp khác nhau .

7.1 Liên hiệp những Set

Để triển khai tích hợp giữa hai tập hợp, tất cả chúng ta sử dụng phương pháp addAll ( ). Ví dụ ,

import java.util.TreeSet;;

class Main {
    public static void main(String[] args) {
        TreeSet evenNumbers = new TreeSet<>();
        evenNumbers.add(2);
        evenNumbers.add(4);
        System.out.println("TreeSet1: " + evenNumbers);

        TreeSet numbers = new TreeSet<>();
        numbers.add(1);
        numbers.add(2);
        numbers.add(3);
        System.out.println("TreeSet2: " + numbers);

        // Union of two sets
        numbers.addAll(evenNumbers);
        System.out.println("Union is: " + numbers);

    }
}

Đầu ra

TreeSet1: [2, 4]
TreeSet2: [1, 2, 3]
Union is: [1, 2, 3, 4]

7.2 Giao điểm của Set

Để thực thi giao giữa hai tập hợp, ta sử dụng phương pháp retainAll ( ). Ví dụ ,

import java.util.TreeSet;;

class Main {
    public static void main(String[] args) {
        TreeSet evenNumbers = new TreeSet<>();
        evenNumbers.add(2);
        evenNumbers.add(4);
        System.out.println("TreeSet1: " + evenNumbers);

        TreeSet numbers = new TreeSet<>();
        numbers.add(1);
        numbers.add(2);
        numbers.add(3);
        System.out.println("TreeSet2: " + numbers);

        // Intersection of two sets
        numbers.retainAll(evenNumbers);
        System.out.println("Intersection is: " + numbers);
    }
}

Đầu ra

TreeSet1: [2, 4]
TreeSet2: [1, 2, 3]
Intersection is: [2]

7.3 Sự độc lạ của những set

Để giám sát sự độc lạ giữa hai tập hợp, tất cả chúng ta hoàn toàn có thể sử dụng phương pháp removeAll ( ). Ví dụ ,

import java.util.TreeSet;;

class Main {
    public static void main(String[] args) {
        TreeSet evenNumbers = new TreeSet<>();
        evenNumbers.add(2);
        evenNumbers.add(4);
        System.out.println("TreeSet1: " + evenNumbers);

        TreeSet numbers = new TreeSet<>();
        numbers.add(1);
        numbers.add(2);
        numbers.add(3);
        numbers.add(4);
        System.out.println("TreeSet2: " + numbers);

        // Difference between two sets
        numbers.removeAll(evenNumbers);
        System.out.println("Difference is: " + numbers);
    }
}

Đầu ra

TreeSet1: [2, 4]
TreeSet2: [1, 2, 3, 4]
Difference is: [1, 3]

7.4 Tập hợp con của một Tập hợp

Để kiểm tra một tập hợp có phải là tập hợp con của tập hợp khác hay không, tất cả chúng ta sử dụng phương pháp. containsAll ( ) Ví dụ ,

import java.util.TreeSet;

class Main {
    public static void main(String[] args) {
        TreeSet numbers = new TreeSet<>();
        numbers.add(1);
        numbers.add(2);
        numbers.add(3);
        numbers.add(4);
        System.out.println("TreeSet1: " + numbers);

        TreeSet primeNumbers = new TreeSet<>();
        primeNumbers.add(2);
        primeNumbers.add(3);
        System.out.println("TreeSet2: " + primeNumbers);

        // Check if primeNumbers is subset of numbers
        boolean result = numbers.containsAll(primeNumbers);
        System.out.println("Is TreeSet2 subset of TreeSet1? " + result);
    }
}

Đầu ra

TreeSet1: [1, 2, 3, 4]
TreeSet2: [2, 3]
Is TreeSet2 subset of TreeSet1? True

8. Các phương thức khác của TreeSet

phương thức Sự miêu tả
clone() Tạo một bản sao của TreeSet
contains() Tìm kiếm TreeSet cho phần tử được chỉ định và trả về kết quả boolean
isEmpty() Kiểm tra xem TreeSet có trống không
size() Trả về kích thước của TreeSet
clear() Loại bỏ tất cả các phần tử khỏi TreeSet

Để tìm hiểu và khám phá thêm, hãy truy cập Java TreeSet ( tài liệu Java chính thức ) .

9. TreeSet Vs. HashSet

Cả hai TreeSet cũng như HashSet đều tiến hành từ Set interface. Tuy nhiên, sống sót một số ít độc lạ giữa chúng .

  • Không giống như HashSet, các phần tử trong TreeSet được lưu trữ theo một số thứ tự. Đó là bởi vì TreeSet thực hiện SortedSeti nterface là tốt.
  • TreeSet cung cấp một số phương thức để điều hướng dễ dàng. Ví dụ, first(), last(), headSet(), tailSet()vv Đó là bởi vì TreeSet cũng thực hiện các NavigableSet interface.
  • HashSet nhanh hơn so TreeSet với các thao tác cơ bản như thêm, bớt, chứa và kích thước.

10. Set so sánh TreeSet

Trong toàn bộ những ví dụ trên, những thành phần của tập hợp cây được sắp xếp tự nhiên. Tuy nhiên, tất cả chúng ta cũng hoàn toàn có thể tùy chỉnh thứ tự của những thành phần .
Đối với điều này, tất cả chúng ta cần tạo lớp so sánh của riêng mình dựa trên những thành phần trong tập hợp cây được sắp xếp. Ví dụ ,

import java.util.TreeSet;
import java.util.Comparator;

class Main {
    public static void main(String[] args) {

        // Creating a tree set with customized comparator
        TreeSet animals = new TreeSet<>(new CustomComparator());

        animals.add("Dog");
        animals.add("Zebra");
        animals.add("Cat");
        animals.add("Horse");
        System.out.println("TreeSet: " + animals);
    }

    // Creating a comparator class
    public static class CustomComparator implements Comparator {

        @Override
        public int compare(String animal1, String animal2) {
            int value =  animal1.compareTo(animal2);

            // elements are sorted in reverse order
            if (value > 0) {
                return -1;
            }
            else if (value < 0) {
                return 1;
            }
            else {
                return 0;
            }
        }
    }
}

Đầu ra

TreeSet: [Zebra, Horse, Dog, Cat]

Trong ví dụ trên, tất cả chúng ta đã tạo một tập hợp cây truyền lớp CustomComparator như một đối số .
lớp CustomComparator thực thi Comparator interface .
Sau đó, tất cả chúng ta ghi đè phương pháp compare ( ). Phương thức sẽ sắp xếp những thành phần theo thứ tự ngược lại .
Để tìm hiểu và khám phá thêm, hãy truy vấn Trình so sánh Java ( tài liệu Java chính thức ) .

Cài ứng dụng cafedev để dễ dàng cập nhật tin và học lập trình mọi lúc mọi nơi tại đây.

Nguồn và Tài liệu tiếng anh tham khảo:

Tài liệu từ cafedev:

Nếu bạn thấy hay và có ích, bạn hoàn toàn có thể tham gia những kênh sau của cafedev để nhận được nhiều hơn nữa :
Chào thân ái và quyết thắng !

Đăng ký kênh youtube để ủng hộ Cafedev nha các bạn, Thanks you!