Trên thực tế, một số ngày nay HashMap implentations đang thực sự làm bằng mảng như bạn đề xuất. Hãy để tôi phác họa cách hoạt động:
Hàm băm Hàm băm biến khóa thành chỉ mục cho mảng đầu tiên (mảng K). Một hàm băm như MD5 hoặc đơn giản hơn, thường bao gồm một toán tử modulo, có thể được sử dụng cho điều này.
Xô Việc triển khai Hashmap dựa trên mảng đơn giản có thể sử dụng nhóm để đối phó với việc thu thập. Mỗi phần tử ('bucket') trong mảng K chứa chính nó một mảng (mảng P) của các cặp. Khi thêm hoặc truy vấn một phần tử, hàm băm sẽ đưa bạn đến đúng nhóm trong K, chứa mảng mong muốn của bạn P. Bạn sau đó lặp qua các phần tử trong P cho đến khi bạn tìm thấy một khóa khớp hoặc bạn gán một phần tử mới tại cuối P.
phím Mapping để xô sử dụng Hash Bạn nên chắc chắn rằng số lượng thùng (tức là kích thước của K) là một sức mạnh của 2, giả sử 2^b. Để tìm chỉ mục nhóm chính xác cho một số khóa, hãy tính toán Hash (khóa) nhưng chỉ giữ lại các bit b đầu tiên. Đây là chỉ mục của bạn khi truyền tới một số nguyên.
Thay đổi tỷ lệ Tính toán băm của khóa và tìm đúng nhóm rất nhanh. Nhưng một khi một xô trở nên đầy đủ hơn, bạn sẽ phải lặp lại nhiều hơn và nhiều hơn nữa các mặt hàng trước khi bạn nhận được một bên phải. Vì vậy, điều quan trọng là phải có đủ nhóm để phân phối đúng đối tượng hoặc Hashmap của bạn sẽ trở nên chậm.
Bởi vì bạn thường không biết bạn muốn lưu trữ bao nhiêu đối tượng trong Hashmap trước, bạn nên tự động tăng hoặc thu nhỏ bản đồ. Bạn có thể giữ một số lượng các đối tượng được lưu trữ, và một khi nó đi qua một ngưỡng nhất định bạn tạo lại toàn bộ cấu trúc, nhưng lần này với một kích thước lớn hơn hoặc nhỏ hơn cho mảng K.Bằng cách này, một số thùng trong K đã rất đầy đủ bây giờ sẽ có các yếu tố của chúng được chia cho một số nhóm, do đó hiệu suất sẽ tốt hơn.
Lựa chọn thay thế Bạn cũng có thể sử dụng mảng hai chiều thay vì mảng mảng hoặc bạn có thể trao đổi mảng P cho danh sách được liên kết. Hơn nữa, thay vì giữ tổng số đối tượng đã lưu trữ, bạn có thể chỉ cần chọn tạo lại (tức là rescale) hashmap khi một trong các thùng chứa nhiều hơn một số mục được cấu hình.
Biến thể của những gì bạn đang yêu cầu được mô tả là 'bảng băm mảng' trong Hash table Wikipedia entry.
Mã Đối với mẫu mã, hãy xem here.
Hy vọng điều này sẽ hữu ích.
bạn có thể có một chút chính xác hơn? Bạn muốn đạt được điều gì một cách chính xác? Bạn đang nhắm mục tiêu một ngôn ngữ cụ thể hay không? – romaintaz
@romaintaz xin vui lòng xem ở trên để làm rõ – locoboy