NỘI DUNG BÀI VIẾT
TreeSet trong Java là cách triển khai phổ biến nhất java.util.SortedSet
. SortedSet là một interface extends java.util.Set
. SortedSet cung cấp tổng thứ tự trên các phần tử của nó.
TreeSet trong Java
Nói cách khác, trong khi lặp lại TreeSet, chúng ta có thể mong đợi dữ liệu được sắp xếp. Các phần tử TreeSet được sắp xếp theo thứ tự tự nhiên của chúng hoặc chúng ta có thể cung cấp một Comparator
để tạo SortedSet
. Nếu chúng ta không cung cấp Bộ Comparator
cụ thể trong quá trình tạo TreeSet, các phần tử phải triển khai Bộ Comparator
để đảm bảo thứ tự tự nhiên.
Constructors của TreeSet trong Java
TreeSet là cách triển khai SortedSet rất phổ biến. Theo đặc tả, tất cả các lớp triển khai tập hợp được sắp xếp phải cung cấp 4 loại hàm tạo.
- A void (no arguments) constructor
- A constructor with an argument of type Comparator
- A constructor with an argument of type Collection
- A constructor with an argument of type SortedSet
Rất tiếc, các interface không được chứa các hàm tạo. Vì vậy, không có bất kỳ cách nào để thực thi những đề xuất này.
Ví dụ TreeSet trong Java
Bây giờ chúng ta hãy tạo một tập hợp được sắp xếp bằng các cách khác nhau, như đã đề cập trước đó, chúng ta sẽ xem xét các ví dụ khác nhau về TreeSet.
// Create a sorted set of Integers
SortedSet<Integer> setWithNaturalOrdering = new TreeSet<>();
setWithNaturalOrdering.add(5);
setWithNaturalOrdering.add(9);
setWithNaturalOrdering.add(4);
setWithNaturalOrdering.add(2);
setWithNaturalOrdering.forEach(System.out::println);
Code language: PHP (php)
Output:
2
4
5
9
Java TreeSet Comparable
Bây giờ chúng ta sẽ tạo một SortedSet với Object Person, nó implement interface Comparable.
class Person implements Comparable<Person> {
int id;
String name;
public Person(int id, String name) {
this.id = id;
this.name = name;
}
@Override
public int compareTo(Person p) {
return this.name.compareTo(p.name);
}
@Override
public String toString() {
return this.name;
}
}
Code language: JavaScript (javascript)
// Create a sorted set with user defined class
SortedSet<Person> sortedSet = new TreeSet<>();
sortedSet.add(new Person(1, "Mark"));
sortedSet.add(new Person(2, "Vispi"));
sortedSet.add(new Person(3, "Harmony"));
sortedSet.forEach(System.out::println);
Code language: PHP (php)
Output:
Harmony
Mark
Vispi
Java TreeSet Comparator
Để cung cấp thứ tự khác nhau, chúng ta cần chuyển triển khai bộ so sánh tùy chỉnh trong khi tạo tập hợp được sắp xếp. Ví dụ: hãy sắp xếp đặt theo thuộc tính id của lớp Person.
// we can also provide instance of Comparator implementation instead of lambda
SortedSet<Person> customOrderedSet = new TreeSet<>((p1, p2) -> p1.id - p2.id);
customOrderedSet.addAll(sortedSet);
customOrderedSet.forEach(System.out::println);
Code language: PHP (php)
Output:
Mark
Vispi
Harmony
Java Sorted Set Example
Chúng ta cũng có thể tạo tập hợp đã sắp xếp bằng cách chuyển một đối tượng tập hợp khác hoặc một tập hợp đã sắp xếp khác.
List<Person> listOfPerson = Arrays.asList(new Person(1, "Mark"), new Person(2, "Vispi"), new Person(3, "Harmony"));
SortedSet<Person> sortedSetFromCollection = new TreeSet<>(listOfPerson);
SortedSet<Person> copiedSet = new TreeSet<>(sortedSetFromCollection);
copiedSet.forEach(System.out::println);
Code language: PHP (php)
Output:
Harmony
Mark
Vispi
Java SortedSet Methods
SortedSet chắc chắn nhận được một số đặc quyền bổ sung so với Set vì bản chất được sắp xếp của nó. Như bạn có thể đã biết, ngoài các phương thức kế thừa từ giao diện Set, nó cũng cung cấp một số phương thức bổ sung.
Comparator<? super E> comparator()
: Trả về thể hiện so sánh được sử dụng để sắp xếp thứ tự các phần tử trong tập hợp. Nếu các phần tử được sắp xếp theo thứ tự tự nhiên của chúng, nó sẽ trả về null.SortedSet<E> subSet(E fromElement, E toElement)
: Trả về một phần của tập hợp này cho phạm vi đã cho. (fromElement là bao gồm trong khi toElement là độc quyền). Lưu ý rằng nó trả về một dạng xem của tập hợp con. Do đó, những thay đổi được thực hiện trên tập hợp trả về được phản ánh trong tập hợp thực tế.SortedSet<E> headSet(E toElement)
: Trả về dạng xem của phần của tập hợp này có các phần tử nhỏ hơn hoàn toàn so với toElement.SortedSet<E> tailSet(E fromElement)
: Returns a view of the portion of this set whose elements are greater than or equal to fromElement.E first()
: Trả về dạng xem của phần của tập hợp này có các phần tử lớn hơn hoặc bằng fromElement. E first (): Trả về phần tử đầu tiên của tập hợp đó là phần tử thấp nhất trong tập hợp.E last()
: Trả về phần tử cuối cùng của tập hợp mà nó sẽ là phần tử cao nhất trong tập hợp.
Tổng kết
Trên đây là các kiến thức của TreeSet và ví dụ về TreeSet trong Java, chúc bạn học tốt.
Nguồn video: 28tech