2012-12-11 17 views
7

Việc triển khai Java HashMap có thành viên 'tiếp theo' trong lớp riêng tư. Vì, một giá trị mới cho một khóa sẽ ghi đè lên giá trị cũ, việc sử dụng thành viên 'tiếp theo' trong lớp Entry là gì.Triển khai Java HashMap có thành viên 'tiếp theo' trong lớp Nhập cảnh. Việc sử dụng nó là gì

static class Entry<K,V> implements Map.Entry<K,V> { 
     final K key; 
     V value; 
     Entry<K,V> next; 
     final int hash; 

     /** 
     * Creates new entry. 
     */ 
     Entry(int h, K k, V v, Entry<K,V> n) { 
      value = v; 
      next = n; 
      key = k; 
      hash = h; 
     } 
    ..... 

} 

Trả lời

7

next là mục nhập tiếp theo trong cùng một nhóm.

Bạn có thể có nhiều mục ở mỗi nhóm - một cái xô chứa tất cả các mục với mã băm bằng một số i mod 2^n đối với một số n, không chỉ các mục có một chìa khóa riêng.

+2

... vì mỗi nhóm được triển khai dưới dạng danh sách được liên kết – Bohemian

+1

Cảm ơn .. Tôi hiểu rằng đó là triển khai danh sách được liên kết .. Nhưng làm cách nào chúng tôi có được tất cả giá trị từ bản đồ. Chúng tôi chỉ lấy cái được chèn cuối cùng cho cùng một khóa. –

+0

Chỉ có một giá trị cho mỗi khóa. Các giá trị cũ không được để lại trong bản đồ; đó sẽ là vô nghĩa. Nhưng bạn có thể nhận được tập hợp các giá trị (một giá trị cho mỗi khóa, rõ ràng) với 'HashMap.values ​​()'. –

2

Nếu nhiều mục được băm vào cùng một nhóm, thì nhóm cần có thể chứa tất cả các mục, do đó, trong nhiều lần triển khai, nó sẽ trở thành tập hợp một số loại, như danh sách.

0

Đó là để liên kết các mục với nhau.

+0

Điều đó có thể là như vậy, nhưng có thể một chút về việc xây dựng ý nghĩa của bạn sẽ tốt ... –

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