HashSet และ ArrayList เป็นคลาสสำคัญของ Java Collection Framework มีความแตกต่างสำคัญดังนี้:
| ลำดับ | หัวข้อ | ArrayList | HashSet |
|---|---|---|---|
| 1 | การนำไปใช้ (Implementation) | นำอินเตอร์เฟซ List ไปใช้ | นำอินเตอร์เฟซ Set ไปใช้ |
| 2 | โครงสร้างภายใน | ใช้ Array ภายใน | ใช้ HashMap ภายใน |
| 3 | ลำดับสมาชิก | รักษาลำดับการแทรก (Insertion order) | ไม่มีลำดับ (Unordered) |
| 4 | ค่าซ้ำ | อนุญาตให้มีค่าซ้ำ | ไม่อนุญาตค่าซ้ำ |
| 5 | ประสิทธิภาพดัชนี | ใช้ดัชนี (index-based) get(index), remove(index) | อิงตามอ็อบเจกต์ ไม่มี get() |
| 6 | ค่า Null | ใส่ null ได้ไม่จำกัด | ใส่ null ได้เพียง 1 ค่า |
ตัวอย่าง ArrayList
import java.io.*;
import java.util.*;
public class JavaTester {
public static void main(String[] args) throws IOException {
int n = 5;
List<Integer> al = new ArrayList<>(n);
for (int i = 1; i <= n; i++) {
al.add(i);
}
System.out.println(al); // [1, 2, 3, 4, 5]
al.remove(3); // ลบดัชนี 3 (ค่า 4)
System.out.println(al); // [1, 2, 3, 5]
for (int i = 0; i < al.size(); i++) {
System.out.print(al.get(i) + " "); // 1 2 3 5
}
}
}
ตัวอย่าง HashSet
import java.util.HashSet;
import java.util.Set;
public class JavaTester {
public static void main(String[] args) {
Set<Integer> hs = new HashSet<>();
hs.add(1);
hs.add(2);
hs.add(3);
hs.add(4);
hs.add(4); // ซ้ำ - จะถูกละเว้น
for (Integer temp : hs) {
System.out.print(temp + " "); // 1 2 3 4 (ลำดับไม่แน่นอน)
}
}
}
สรุป: ใช้ ArrayList เมื่อต้องการลำดับและเข้าถึงดัชนี ใช้ HashSet เมื่อต้องการความเป็นเอกลักษณ์และค้นหาเร็ว