Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Java

Khác biệt giữa TreeSet và HashSet trong Java

Cả hai đều implement interface Set (không cho phép trùng lặp). HashSet backed by HashMap, TreeSet backed by TreeMap (Red-Black Tree).

Bảng so sánh chi tiết

STT Tiêu chí HashSet TreeSet
1 Cấu trúc dữ liệu Hash Table (HashMap nội bộ) Cây đỏ-đen (TreeMap - Red-Black Tree)
2 Null object Cho phép một null element Không cho phép null (ném NullPointerException)
3 So sánh đối tượng Dùng equals() và hashCode() Dùng compareTo() (Comparable) hoặc Comparator
4 Đối tượng heterogeneous Cho phép (miễn implement equals/hashCode đúng) Không cho phép (phải so sánh được với nhau)
5 Thứ tự Không đảm bảo thứ tự (unordered) Luôn duy trì thứ tự tự nhiên (sorted)
6 Độ phức tạp O(1) trung bình cho add/remove/contains O(log n) cho add/remove/contains

Ví dụ TreeSet (Sorted)

TreeSet<String> treeSet = new TreeSet<>();
treeSet.add("Good");
treeSet.add("For");
treeSet.add("Health");
treeSet.add("Good"); // Duplicate bị loại
// Output: For, Good, Health (theo alphabet)

Ví dụ HashSet (Unordered)

HashSet<String> hashSet = new HashSet<>();
hashSet.add("Good");
hashSet.add("For");
hashSet.add("Health");
hashSet.add("Good"); // Duplicate bị loại
// Output: Thứ tự ngẫu nhiên, ví dụ: Health, For, Good

Khi nào dùng cái nào?

  • HashSet: Cần hiệu suất cao (O(1)), không quan tâm thứ tự, kiểm tra tồn tại nhanh.
  • TreeSet: Cần dữ liệu luôn sorted, range queries (subSet, headSet, tailSet), tìm min/max nhanh.

Lưu ý

Với TreeSet, object phải implement Comparable hoặc cung cấp Comparator khi tạo. Tất cả element phải mutually comparable (so sánh được với nhau) để tránh ClassCastException.