01/10/2018, 01:16
[Link]Map/HashMap hoạt động như thế nào?
Đây là một câu hỏi thường gặp trong những buổi phỏng vấn ứng viên Java, và cũng có không ít bạn vì câu hỏi này mà gặp trắc trở, hôm nay chúng ta sẽ thảo luận về nó.
Chúng ta sẽ lần lượt đi qua các điểm.
- HashMap là gì?
- Hashing là gì?
- HashMap được implement thế nào trong Java
- Performance của HashMap so sánh với các data structure khác
- Tổng kết
Cùng xem bài viết nhé!
Series Java những điều có thể bạn đã biết: Map/HashMap hoạt động như thế nào?
Đây là một câu hỏi thường gặp trong những buổi phỏng vấn ứng viên Java, và cũng có không ít bạn vì câu hỏi này mà gặp trắc trở, hôm nay chúng ta sẽ thảo luận về nó.…
Bài liên quan
thớt ế quá thôi góp gạch xây nhà vậy
viết sơ sài quá:
“nhưng mỗi key thì có thể được ánh xạ đến nhiều hơn một giá trị”: câu cú lủng củng, đúng ra phải là 1 value có thể có nhiều key ánh xạ tới. 1 key ánh xạ tới 1 value chứ làm gì 1 key ánh xạ tới 10 value??
“độ phức tạp chỉ còn là O(1). Đó chính là Hash Function.” O(1) mà hash function ở đâu lòi ra đây? Ko ăn nhập gì với phần mảng chưa/đã sắp xếp ở trên…
tại sao bucket lại sử dụng linked list để lưu trữ? ArrayList được ko?
“Lưu ý nho nhỏ, độ phức tạp của hàm get() và put() trong HashMap là O(1) vì nó sử dụng hashCode để tìm giá trị”: put() lúc nào cũng có có đpt là O(1) thiệt à? Hay còn thiếu từ gì đó?
“Và bây giờ tôi chắc chắn rằng các bạn đang thắc mắc, hash thì cũng chỉ là một con số, khả năng trùng nhau là có”:có 1 nguyên tắc cực kì nổi tiếng và cực kì đơn giản để khẳng định trùng bucket / trùng hash code là có, sao ko nêu ra…
“Tất cả các class đều có thể là key nếu nó được override hàm equals() và
hashCode(), ngoài ra việc này cũng giúp biến các class trở thành
immutable class”: thiệt vậy sao? Chỉ cần override equals() và hashCode() là class trở thành immutable à?
phần performance thì ko có cũng được, viết thêm chả để làm gì @_@ Nếu viết thì phải nêu tầm quan trọng của hash function ảnh hưởng tới performance thế nào (vd trùng hash code), rồi nêu cái load factor vô, hoặc nêu ưu/nhược của hash map so với tree map / avl binary tree, v.v…
bài viết tên là “hoạt động như thế nào?” mà chả thấy đá động gì tới put() nó tăng bucket lên thế nào, chỉ đơn giản là x2 số lượng bucket thôi à? Tại sao x2 mà ko phải x3 x1.5… Hoặc còn có chiến thuật gì khác ko? v.v…
Bạn xem thêm Java doc nhé, https://docs.oracle.com/javase/7/docs/api/java/util/Map.html
Vấn đề bạn đó chỉ ra các thắc mắc không phải vì bạn đó không biết mà là bài viết bạn sơ sài quá, nếu cho newbie đọc thì có lẽ có chút ý nghĩa nhưng để hiểu sâu thì bài viết không đáp ứng được. Bạn sửa thêm nhé, không cần quăng link của oracle đâu