Java Internals & Concurrency/Module 4 — Collections Internals: tổng quan
40/42
Bài 40 / 42~8 phútCollections InternalsMiễn phí lượt xem

Module 4 — Collections Internals: tổng quan

Java Collections Framework nhìn từ bên trong: ArrayList.grow() 1.5x và HashMap chaining/treeify. Phần JDK hiện thực các ý tưởng thuật toán học ở track Thuật toán.

TL;DR: Module này mổ phần nội tạng JDK của hai cấu trúc dữ liệu bạn dùng mỗi ngày: ArrayList (mảng động) và HashMap (hash table). Khoá Thuật toán dạy ý tưởng của chúng mà không bám một ngôn ngữ nào (amortized doubling, hashing, va chạm, load factor). Ở đây ta đọc thẳng OpenJDK 21 source để thấy Oracle dựng những ý tưởng đó ra sao — vì sao họ chọn grow factor 1.5x (không phải 2x), vì sao treeify một bucket khi chuỗi dài quá 8.

Vì sao module này tồn tại

Bạn đã học ý tưởng mảng động và hash table ở khoá Thuật toán. Nhưng khi đọc code production Java, bạn gặp những con số rất cụ thể: ArrayList grow 1.5x, HashMap treeify ở ngưỡng 8, load factor 0.75. Đây là những lựa chọn kỹ thuật riêng của JVM — không phải lý thuyết thuật toán — và đáng hiểu để benchmark đúng, tránh hash-collision DoS, và đọc được OpenJDK source.

Sau module này bạn sẽ

  • Giải thích vì sao ArrayList.grow() dùng 1.5x thay vì 2x (memory/allocator JVM).
  • Trace HashMap internals: bucket array, separate chaining, treeify Java 8, resize.
  • Diagnose hash-collision DoS và đọc HashMap.java/ArrayList.java source.

Liên hệ track Thuật toán

Module này là phần hiện thực; phần ý tưởng nằm ở khoá Thuật toán:

Lộ trình module

  • Bài 01 — ArrayList.grow(): vì sao 1.5x là magic number, đọc OpenJDK source, benchmark.
  • Bài 02 — HashMap internals: separate chaining + treeify từ Java 8, resize, hash-collision DoS.

Bài tiếp theo: ArrayList.grow() — Vì sao 1.5x là magic number

Bài này có giúp bạn hiểu bản chất không?

Hỏi đáp về bài này

Chưa có câu hỏi

Đặt câu hỏi

Có gì chưa rõ trong bài? Đặt câu hỏi đầu tiên — câu trả lời từ cộng đồng giúp bạn (và người sau).

Đặt câu hỏi đầu tiên