Java Collections Framework: List, Set, Map อธิบายแบบเข้าใจง่าย

#java13 เม.ย. 2569

Collections Framework คืออะไร

Java Collections Framework เป็น set ของ interfaces และ classes สำหรับจัดการกลุ่มของ objects ประกอบด้วย List, Set, Queue, Map

List — ลำดับและซ้ำได้

import java.util.*;

// ArrayList - fast random access
List<String> names = new ArrayList<>();
names.add("สมชาย");
names.add("สมหญิง");
names.add("สมชาย");  // ซ้ำได้

System.out.println(names.get(0));  // สมชาย
System.out.println(names.size());  // 3

// LinkedList - fast insert/delete
List<Integer> numbers = new LinkedList<>();
numbers.add(1);
numbers.add(0, 0);  // insert ที่ index 0

// Immutable List (Java 9+)
List<String> immutable = List.of("a", "b", "c");

Set — ไม่ซ้ำ

// HashSet - ไม่มีลำดับ
Set<String> hashSet = new HashSet<>();
hashSet.add("apple");
hashSet.add("banana");
hashSet.add("apple");  // ไม่เพิ่ม
System.out.println(hashSet.size());  // 2

// TreeSet - เรียงลำดับ
Set<Integer> treeSet = new TreeSet<>();
treeSet.add(3);
treeSet.add(1);
treeSet.add(2);
System.out.println(treeSet);  // [1, 2, 3]

// LinkedHashSet - รักษาลำดับการเพิ่ม
Set<String> linkedSet = new LinkedHashSet<>();

Map — key-value pairs

// HashMap
Map<String, Integer> scores = new HashMap<>();
scores.put("สมชาย", 95);
scores.put("สมหญิง", 88);
scores.put("สมศักดิ์", 72);

System.out.println(scores.get("สมชาย"));  // 95
System.out.println(scores.getOrDefault("ไม่มี", 0));  // 0

// iterate
for (Map.Entry<String, Integer> entry : scores.entrySet()) {
    System.out.println(entry.getKey() + ": " + entry.getValue());
}

// Java 8+ forEach
scores.forEach((name, score) ->
    System.out.println(name + ": " + score)
);

// TreeMap - เรียงตาม key
Map<String, Integer> sorted = new TreeMap<>(scores);

Queue และ Deque

// Queue - FIFO
Queue<String> queue = new LinkedList<>();
queue.offer("first");
queue.offer("second");
queue.offer("third");

System.out.println(queue.poll());  // first
System.out.println(queue.peek());  // second (ไม่ลบ)

// PriorityQueue
Queue<Integer> pq = new PriorityQueue<>();
pq.offer(3);
pq.offer(1);
pq.offer(2);
System.out.println(pq.poll());  // 1 (น้อยสุดออกก่อน)

Collections Utility

List<Integer> nums = new ArrayList<>(Arrays.asList(3, 1, 4, 1, 5, 9));

Collections.sort(nums);           // เรียงน้อยไปมาก
Collections.reverse(nums);        // กลับลำดับ
Collections.shuffle(nums);        // สุ่ม
int max = Collections.max(nums);  // หาค่าสูงสุด

สรุป

  • List — ใช้เมื่อต้องการลำดับและอนุญาตซ้ำ
  • Set — ใช้เมื่อต้องการ unique values
  • Map — ใช้เมื่อต้องการ key-value lookup
  • Queue — ใช้สำหรับ task scheduling, BFS