ทั้ง HashSet และ TreeSet เป็นส่วนหนึ่งของ Collection Framework HashSet เป็นการนำ Set interface ไปใช้งาน ส่วน TreeSet implements SortedSet TreeSet ใช้ TreeMap เป็นโครงสร้างข้อมูลหลัง (backed by TreeMap) ในขณะที่ HashSet ใช้ HashMap
ตารางเปรียบเทียบรายละเอียด
| ลำดับ | หัวข้อ | HashSet | TreeSet |
|---|---|---|---|
| 1 | การนำไปใช้ | ใช้ HashTable (HashMap) เป็นโครงสร้างหลัง | ใช้โครงสร้างต้นไม้ (Tree structure/Red-Black Tree) |
| 2 | Null Object | รองรับ null object ได้ | ไม่รองรับ null object โยน NullPointerException |
| 3 | เมธอดเปรียบเทียบ | ใช้เมธอด equals() เพื่อเปรียบเทียบอ็อบเจ็กต์ | ใช้เมธอด compare() (หรือ compareTo) เพื่อเปรียบเทียบ |
| 4 | Heterogeneous Objects | ไม่รองรับ heterogeneous objects (ชนิดข้อมูลต่างกันในเซตเดียวกัน) | รองรับ heterogeneous objects ได้ (ถ้าเปรียบเทียบได้) |
| 5 | ลำดับการจัดเก็บ | ไม่รักษาลำดับใดๆ (no ordering) | รักษาอ็อบเจ็กต์ในลำดับที่จัดเรียงแล้ว (sorted order) |
ตัวอย่าง TreeSet
TreeSet<String> treeSet = new TreeSet<>();
treeSet.add("Good");
treeSet.add("For");
treeSet.add("Health");
treeSet.add("Good"); // Duplicate
for (String temp : treeSet) {
System.out.println(temp);
}
ผลลัพธ์
For
Good
Health
ตัวอย่าง HashSet
HashSet<String> hashSet = new HashSet<>();
hashSet.add("Good");
hashSet.add("For");
hashSet.add("Health");
hashSet.add("Good"); // Duplicate
for (String temp : hashSet) {
System.out.println(temp);
}
ผลลัพธ์
Health
For
Good
สรุป
HashSet ให้ประสิทธิภาพ O(1) สำหรับ add, remove, contains แต่ไม่จัดเรียง TreeSet ให้ประสิทธิภาพ O(log n) แต่จัดเก็บข้อมูลเรียงลำดับแล้ว เลือก HashSet เมื่อไม่ต้องการลำดับ เลือก TreeSet เมื่อต้องการข้อมูลเรียงลำดับเสมอ