2015-01-26 49 views
2

使用的HashMap <整型,設置<Integer>>分類數字,而是集錯過鑑於整數數組說的第一個值

integers[] = {1, 2, 1, 7, 2}; 

我打算使用下面的代碼與陣列返回地圖元素作爲鍵和該元素的索引作爲值。

例如,在這種情況下,我們將返回:

1 -> (0,2) 
2 -> (1,4) 
7 -> (3) 

但它不是做得比較工作 - 添加到集合的初始值沒有出現。下面是代碼:

Map<Integer, Set<Integer>> hm = new HashMap<>(); 
for (int k=0; k<integers.length; k++) { 
    Integer key=integers[k]; 
    if (hm.containsKey(key)) 
     hm.get(key).add(k); 
    else 
     hm.put(key, new HashSet<Integer>(k)); 
} 
+0

代碼看起來不行了問題的說明。你面臨什麼問題?你運行這段代碼會得到什麼結果? – aa333 2015-01-26 23:54:05

+1

你是不是指'7 - >(3)'而不是'3 - >(7)'? – xehpuk 2015-01-27 01:04:08

回答

5

您的代碼不會因爲此代碼的工作:

hm.put(key, new HashSet(k)); 

沒有做什麼,你認爲它。 That constructor不接受初始元素,它接受初始大小

而是執行此操作:

Map<Integer, Set<Integer>> hm = new HashMap<>(); 
for (int k=0; k<integers.length; k++){ 
    Integer key=integers[k]; 
    if (!hm.containsKey(key)) 
     hm.put(key, new HashSet<>()); 
    hm.get(key).add(k); 
} 
1

正如@Bohemian正確地說,你沒有使用的HashSet的構造正常。

關於您發佈的問題,另一種解決方案是使用番石榴的HashMultimap類:

int integers[] = {1, 2, 1, 7, 2}; 
Multimap hm = HashMultimap.create(); 
for (int k = 0; k < integers.length; k++) { 
    Integer key = integers[k]; 
    hm.put(key, k); 
} 
Map<Integer, Collection<Integer>> result = hm.asMap(); 
相關問題