Java Collections Framework

1. Tổng Quan

Collections Framework cung cấp một kiến trúc để lưu trữ và thao tác với nhóm các đối tượng. Nó bao gồm: - Interfaces - Implementations - Algorithms

2. Các Interface Chính

2.1 Collection Interface

Interface gốc của hierarchy collections.

2.2 List Interface

  • Một collection có thứ tự
  • Cho phép phần tử trùng lặp
  • Có thể truy cập theo index

2.3 Set Interface

  • Không cho phép phần tử trùng lặp
  • Không đảm bảo thứ tự

2.4 Map Interface

  • Lưu trữ cặp key-value
  • Key không được trùng lặp
  • Value có thể trùng lặp

3. Các Implementation Phổ Biến

3.1 ArrayList

List<String> arrayList = new ArrayList<>();
arrayList.add("First");
arrayList.add("Second");
System.out.println(arrayList.get(0)); // Output: First

3.2 LinkedList

LinkedList<String> linkedList = new LinkedList<>();
linkedList.addFirst("First");
linkedList.addLast("Last");

3.3 HashSet

Set<Integer> hashSet = new HashSet<>();
hashSet.add(1);
hashSet.add(2);
hashSet.add(1); // Sẽ không được thêm vào vì đã tồn tại

3.4 HashMap

Map<String, Integer> hashMap = new HashMap<>();
hashMap.put("One", 1);
hashMap.put("Two", 2);
System.out.println(hashMap.get("One")); // Output: 1

4. So Sánh Hiệu Năng

ArrayList vs LinkedList

  • ArrayList:
  • Truy cập ngẫu nhiên nhanh O(1)
  • Thêm/xóa ở cuối nhanh
  • Thêm/xóa ở giữa chậm
  • LinkedList:
  • Truy cập ngẫu nhiên chậm O(n)
  • Thêm/xóa ở đầu và cuối nhanh
  • Thêm/xóa ở giữa nhanh hơn ArrayList

HashSet vs TreeSet

  • HashSet:
  • Các operation cơ bản O(1)
  • Không duy trì thứ tự
  • TreeSet:
  • Các operation cơ bản O(log n)
  • Duy trì thứ tự tự nhiên

5. Best Practices

  1. Sử dụng interface thay vì implementation
List<String> list = new ArrayList<>();  // Tốt
ArrayList<String> list = new ArrayList<>();  // Không khuyến khích
  1. Chọn đúng collection type:
  2. Cần thứ tự và truy cập ngẫu nhiên: ArrayList
  3. Cần thêm/xóa nhiều ở đầu/cuối: LinkedList
  4. Cần unique elements: Set
  5. Cần key-value pairs: Map