Gần đây tôi đã biết rằng trong bản đồ băm Java 8 sử dụng cây nhị phân thay vì danh sách liên kết và mã băm được sử dụng làm hệ số phân nhánh.I hiểu rằng trong trường hợp va chạm cao, việc tra cứu được giảm xuống O (log n) từ O (n) bằng cách sử dụng cây nhị phân. Câu hỏi của tôi là thực sự làm tốt khi độ phức tạp thời gian phân bổ vẫn là O (1) và có thể nếu bạn buộc lưu trữ tất cả các mục trong cùng một nhóm bằng cách cung cấp cùng một mã băm cho tất cả chìa khóa chúng ta có thể thấy sự khác biệt đáng kể về thời gian nhưng không ai trong tâm trí của họ sẽ làm điều đó.Tại sao bản đồ băm trong Java 8 sử dụng cây nhị phân thay vì danh sách liên kết?
Cây nhị phân cũng sử dụng nhiều không gian hơn danh sách được liên kết đơn lẻ vì nó lưu trữ cả hai nút trái và phải.Why tăng độ phức tạp của không gian khi hoàn toàn không có sự phức tạp về thời gian ngoại trừ một số trường hợp kiểm tra giả mạo.
Đây không phải là cuộc tranh luận. Tôi trích dẫn: * Câu hỏi của tôi là nó thực sự tốt [...] có thể nếu bạn [...] chúng ta có thể thấy sự khác biệt đáng kể nhưng không ai trong tâm trí của họ sẽ làm điều đó. Vì vậy, bạn đang nói nó được thiết kế để xử lý một trường hợp không ai trong tâm trí của họ sẽ làm, do đó các devs ** rõ ràng ** xử lý một trường hợp câm, do đó các devs là câm và bạn giữ Chân lý. Tôi đề nghị viết lại câu hỏi của bạn. – Tunaki
Câu hỏi của bạn không có ý nghĩa. Nếu bạn cho rằng các va chạm băm sẽ không xảy ra, thì cây nhị phân sẽ * không * tiêu thụ nhiều không gian hơn vì cây nhị phân sẽ chỉ được sử dụng khi có * là các xung đột băm. Để chính xác hơn, số lượng va chạm phải vượt quá ngưỡng trước khi triển khai chuyển từ danh sách được liên kết sang cây nhị phân. – Holger
@Tunaki Tôi đặc biệt có nghĩa là những người cố ý cố gắng kịch bản đó để cho thấy lợi thế và nếu tôi nghĩ rằng không có gì hơn để nó tôi sẽ không bao giờ hỏi nó như là một câu hỏi. – user1613360