TreeMap: Sorted Map (Red-Black Tree)
เก็บ key-value เรียงตาม key อัตโนมัติ (natural ordering หรือ Comparator) O(log n) สำหรับ put/get
โจทย์: เรียง User Objects ตามอายุ (Integer)
import java.util.*;
class Person {
String name;
int age;
Person(String name, int age) { this.name = name; this.age = age; }
@Override public String toString() { return name + "(" + age + ")"; }
}
public class Demo {
public static void main(String[] args) {
// ข้อมูล: name age name age ...
String data = "Joe 36 Hannah 24 Jill 13 Jack 1 Preet 8 Deep 45";
// Parse และ group by age ใน TreeMap (เรียงตามอายุอัตโนมัติ)
TreeMap> map = new TreeMap<>();
String[] parts = data.split(" ");
for (int i = 0; i < parts.length; i += 2) {
String name = parts[i];
int age = Integer.parseInt(parts[i + 1]);
map.computeIfAbsent(age, k -> new ArrayList<>()).add(name);
}
// เรียงชื่อในแต่ละอายุ (optional)
map.forEach((age, names) -> Collections.sort(names));
// แสดงผล
map.forEach((age, names) ->
names.forEach(name -> System.out.println(name + " " + age))
);
}
}
ผลลัพธ์
Jack 1 Preet 8 Jill 13 Hannah 24 Joe 36 Deep 45
จุดสำคัญ
TreeMapเรียง key อัตโนมัติ (Integer มี natural ordering)computeIfAbsent(Java 8) สร้าง List ใหม่ถ้ายังไม่มี key นั้น- เก็บ List
เป็น value เพื่อรองรับหลายคนอายุเท่ากัน - Complexity: O(n log n) สำหรับ n คน
เปรียบเทียบ Map Implementations
| Map | Order | Null Key | Time (get/put) |
|---|---|---|---|
| HashMap | ไม่มี | ได้ 1 ตัว | O(1) |
| LinkedHashMap | Insertion/Access | ได้ 1 ตัว | O(1) |
| TreeMap | Sorted (Key) | ไม่ได้ (throw NPE) | O(log n) |
| Hashtable | ไม่มี | ไม่ได้ | O(1) synchronized |