HashSet นำ Set interface ไปใช้ ไม่อนุญาตค่าซ้ำ ไม่ซิงโครไนซ์ ไม่ thread-safe เมธอด add() คืน false หากค่าซ้ำ
ไวยากรณ์คลาส
public class HashSet<E> extends AbstractSet<E>
implements Set<E>, Cloneable, Serializable
ตัวอย่าง: Custom HashSet Implementation
import java.util.*;
public class CustomHashSetTest extends AbstractSet<String> {
private Map<String, Object> map = new HashMap<>();
private static final Object PRESENT = new Object();
@Override
public Iterator<String> iterator() {
return map.keySet().iterator();
}
@Override
public int size() {
return map.size();
}
@Override
public boolean add(String e) {
return map.put(e, PRESENT) == null;
}
public static void main(String[] args) {
CustomHashSetTest set = new CustomHashSetTest();
set.add("England");
set.add("Australia");
set.add("India");
set.add("Australia"); // Duplicate - will be ignored
for (String s : set) {
System.out.println(s);
}
}
}
ผลลัพธ์
England
Australia
India
หลักการ: ใช้ HashMap ภายใน key = element, value = dummy object (PRESENT) add() คืน true ถ้า key ใหม่ false ถ้ามีอยู่แล้ว