2012-12-07 31 views
5

Khi chúng tôi đặt cặp khóa-giá trị trong HashMap điều này có thể xảy ra mã băm của hai khóa có thể giống nhau thì cách thức lưu trữ và truy xuất khóa-giá trị này sẽ được xử lý.Độ phân giải va chạm trong HashMap

Cập nhật

Những gì tôi hiểu cho đến nay là nếu hai chìa khóa đối tượng có cùng một mã băm sau đó cả hai đối tượng chủ chốt sẽ được lưu trữ trong cùng một xô và khi tôi sẽ nói get(key) sau đó ra khỏi hai đối tượng với phù hợp với hashcode yếu tố nào để tìm nạp được quyết định bởi object.equals().

+0

http://stackoverflow.com/questions/4980757/how-do-hashtables-deal-with-collisions –

+0

http://stackoverflow.com/questions/12945894/java-hashmap-confusion-about-collision-handling -and-the-get-method –

Trả lời

9

Khi bạn muốn truy xuất một số đối tượng từ hashmap và tồn tại một số đối tượng có cùng mã băm, java sẽ gọi equals() để xác định đúng đối tượng.

Đó là lý do tại sao điều quan trọng là ghi đè equals() khi ghi đè hashCode().

+0

điểm tốt về truy xuất –

+0

cảm ơn câu trả lời đơn giản và rõ ràng nhưng tôi vẫn còn nhầm lẫn để bạn có thể vui lòng nhận xét về cập nhật câu hỏi của tôi –

+0

Vâng, đúng vậy. Chúng ta sẽ lặp qua danh sách các khóa trong thùng và gọi 'equals()' trên khóa của chúng ta so sánh nó với mỗi khóa cho đến khi chúng ta tìm thấy một kết quả phù hợp. –

3

Mỗi nhóm được đại diện bởi một danh sách được liên kết, do đó không có giới hạn, ngoài không gian heap, về số lượng mục nhập trong một nhóm. Có ít nhóm hơn kết quả hashCode có thể, do đó, nhiều mã băm được ánh xạ tới cùng một nhóm, không chỉ các khóa có cùng hashCode.

A hashCode() với nhiều va chạm, hoặc HashMap với quá ít nhóm, có thể tạo một số danh sách được liên kết lâu. Hiệu suất tốt phụ thuộc vào các danh sách được liên kết ngắn, bởi vì giai đoạn cuối cùng trong việc tra cứu là quét tuyến tính của một trong các danh sách được liên kết.

Tôi đồng ý với câu trả lời trước rằng trận đấu tùy thuộc vào cả hai số equals()hashCode().

+0

+1 cho "Có ít nhóm hơn kết quả hashCode có thể, do đó, nhiều mã băm được ánh xạ tới cùng một nhóm, không chỉ các khóa có cùng hashCode" – Atul

Các vấn đề liên quan