2014-11-04 89 views
0

當多個密鑰具有相同的哈希碼時,就會發生衝突。在這種情況下,鍵值條目以鏈接列表格式存儲到存儲桶中。現在我想知道給定存儲區有多少這樣的Map.Entry對。是否有任何內置的java方法可以幫助我識別?查找桶中有多少個密鑰

bucket1 ---->(10,1)--->(100,2)---在這種情況下,回答爲2。

bucket2 ---->(2,1)----回答是1

bucket3 ---->(3,5)--->(6,10)--- >(9,15)--->(12,18)----在這種情況下回答4.

任何對此的幫助都會很大。

回答

2

除非您使用集合作爲地圖的值,否則您將無法爲特定存儲區使用多個值。檢查什麼put()將在文檔做HashMap

使用清單作爲映射值,你可以嘗試以下方法:

import java.util.Arrays; 
import java.util.LinkedHashMap; 
import java.util.List; 
import java.util.Map; 

public class Playground { 

    public static void main(String[] args) { 
     Map<Integer, List<Pair>> map = new LinkedHashMap<Integer, List<Pair>>(); 

     map.put(1, Arrays.asList(new Pair(10, 1) , new Pair(100, 2))); 
     map.put(2, Arrays.asList(new Pair(2, 1))); 
     map.put(3, Arrays.asList(new Pair(3, 5), new Pair(6, 10), new Pair(9, 15), new Pair(12, 18))); 

     for (Map.Entry<Integer, List<Pair>> entry : map.entrySet()) { 
      System.out.println(String.format("Bucket %d has %d item(s)", entry.getKey(), entry.getValue().size())); 
     } 
    } 
} 

class Pair { 
    Integer x; 
    Integer y; 

    Pair(Integer x, Integer y) { 
     this.x = x; 
     this.y = y; 
    } 
} 

輸出將是如下:

Bucket 1 has 2 item(s) 
Bucket 2 has 1 item(s) 
Bucket 3 has 4 item(s) 

希望有幫助

+1

我不認爲這回答了我的問題(或者我問的問題不是很清楚)。讓我們假設,我有一個bucket大小爲5的hashmap/hashtable。爲了計算hashcode,我使用mod 5運算符作爲散列函數。前5個鍵即1,2,3,4,5將佔據桶1到5.當我將鍵6和一些值一起插入時,它將被添加到桶1.因此,桶1的大小現在爲2。是我正在尋找的。 – Ram27 2014-11-04 02:47:15

+0

我明白你的意思了。我不認爲這些桶的信息會被暴露。快速檢查[源代碼](http://www.docjar.com/html/api/java/util/HashMap.java.html),您需要的信息就在那裏,只是不公開提供。 – 2014-11-04 03:24:22

+0

謝謝,只是在同一頁面上,你是指addEntry/createEntry方法? – Ram27 2014-11-04 05:46:21