LinkedHashMap
Hash table + Linked list = คงลำดับการ insert (insertion-order) อนุญาต null key/value ได้ 1 คีย์
ตัวอย่าง
import java.util.*;
public class Demo {
public static void main(String[] args) {
LinkedHashMap map = new LinkedHashMap<>();
map.put(67, "Joe");
map.put(90, "Dev");
map.put(null, "Nate"); // null key ได้ 1 ตัว
map.put(68, "Sara");
map.put(69, "Amal");
map.put(null, "Jake"); // แทนที่ค่า null key เดิม
map.put(69, "Ral"); // แทนที่ key 69 เดิม
map.forEach((k, v) -> System.out.println(k + " -> " + v));
}
}
ผลลัพธ์
67 -> Joe 90 -> Dev null -> Jake 68 -> Sara 69 -> Ral
LinkedHashSet
Hash table + Linked list = คงลำดับการ add ไม่อนุญาต duplicate (Set)
ตัวอย่าง
import java.util.*;
public class Demo {
public static void main(String[] args) {
LinkedHashSet set = new LinkedHashSet<>();
set.add("Joe");
set.add("Dev");
set.add("Nate");
set.add("Sara");
set.add("Amal");
set.add("Jake");
set.add("Ral");
for (String s : set) {
System.out.println(s);
}
}
}
ผลลัพธ์
Joe Dev Nate Sara Amal Jake Ral
ความแตกต่างสำคัญ
| คุณสมบัติ | LinkedHashMap | LinkedHashSet |
|---|---|---|
| Interface | Map<K,V> | Set<E> |
| Key/Value | คู่ key-value | แค่ element |
| Null key | ได้ 1 ตัว | ได้ 1 ตัว (เป็น element) |
| Duplicate key | แทนที่ค่าเก่า | ไม่อนุญาต (ignore) |
| Order | Insertion-order | Insertion-order |
| Access-order | ได้ (constructor param) | ไม่ได้ |
Access-Order LinkedHashMap (สำหรับ LRU Cache)
// accessOrder = true: ลำดับตามการเข้าถึง (get/put) ล่าสุดอยู่ท้าย
LinkedHashMap lruMap = new LinkedHashMap<>(16, 0.75f, true) {
@Override
protected boolean removeEldestEntry(Map.Entry eldest) {
return size() > 100; // จำกัดขนาด max 100
}
};