Trong lập trình Java, TreeSet
là một lớp trong cấu trúc dữ liệu Set. Nó triển khai giao diện NavigableSet
và được sử dụng để duy trì một tập hợp các phần tử không trùng lặp theo thứ tự tăng dần hoặc giảm dần.
TreeSet
triển khai cơ chế dựa trên cây (self-balancing binary search tree) để duy trì các phần tử trong tập hợp. Do đó, việc truy xuất, thêm, xóa phần tử và tìm kiếm các phần tử trong TreeSet
có độ phức tạp là O(log n), nơi n là số lượng phần tử trong tập hợp.
Điểm nổi bật của TreeSet
là thứ tự tự nhiên của các phần tử, cho phép duyệt qua các phần tử theo thứ tự tăng dần hoặc giảm dần.
Dưới đây là cách tạo và sử dụng TreeSet
trong Java:
- Khởi tạo một đối tượng
TreeSet
trống:
java
import java.util.TreeSet;
TreeSet<String> treeSet = new TreeSet<>();
- Thêm phần tử vào
TreeSet
:
java
treeSet.add("apple");
treeSet.add("banana");
treeSet.add("orange");
- Duyệt qua
TreeSet
theo thứ tự tăng dần:
java
for (String fruit : treeSet) {
System.out.println(fruit);
}
Kết quả đầu ra sẽ là:
apple
banana
orange
- Duyệt qua
TreeSet
theo thứ tự giảm dần bằng cách sử dụng iterator:
java
import java.util.Iterator;
Iterator<String> descendingIterator = treeSet.descendingIterator();
while (descendingIterator.hasNext()) {
System.out.println(descendingIterator.next());
}
Kết quả đầu ra sẽ là:
orange
banana
apple
Một số điểm cần lưu ý về TreeSet
:
- Các phần tử trong
TreeSet
phải là các đối tượng có thể so sánh được (implement interfaceComparable
hoặc sử dụng mộtComparator
được cung cấp khi khởi tạo) để xác định thứ tự giữa chúng. TreeSet
không cho phép các phần tử trùng lặp. Nếu bạn thêm một phần tử đã tồn tại trong tập hợp, nó sẽ không thay đổi tập hợp và không có thông báo lỗi.TreeSet
không đồng bộ (non-synchronized). Nếu bạn cần sử dụng nó trong môi trường đa luồng (multi-threading), bạn nên thêm đồng bộ hóa để đảm bảo tính toàn vẹn dữ liệu.