2013-08-18 59 views
2
Hashtable<Integer,String> ht = new Hashtable<Integer,String>(); 
ht.put(1,"student1"); 
ht.put(1,"student2"); 

如何迭代「單個鍵」的所有值?遍歷哈希表中的所有鍵值java

key:1 values: student1, student2

回答

5

您需要使用:

Hashtable<Integer, List<String>> ht = new Hashtable<Integer, List<String>>(); 

,並在相關List特定的鍵添加新的字符串值。

話雖如此,你應該使用HashMap而不是Hashtable。後者是傳統類,後者已被前者取代。

Map<Integer, List<String>> map = new HashMap<Integer, List<String>>(); 

然後插入一個新條目之前,請檢查開關是否已經存在,使用Map#containsKey()方法。如果密鑰已經存在,請取出相應的列表,然後向其中添加新值。否則,放一個新的鍵值對。

if (map.containsKey(2)) { 
    map.get(2).add("newValue"); 
} else { 
    map.put(2, new ArrayList<String>(Arrays.asList("newValue")); 
} 

另一種選擇是使用Guava's Multimap,如果你可以使用第三方庫。

Multimap<Integer, String> myMultimap = ArrayListMultimap.create(); 

myMultimap.put(1,"student1"); 
myMultimap.put(1,"student2"); 

Collection<String> values = myMultimap.get(1); 
+0

非常感謝。什麼doea Arrays.asList(「newValue」)是什麼意思? – Sara

+0

@sweet。它使用傳入該方法的值創建一個新的List。在'Arrays'類中查看該方法的文檔。 –

5

散列表不存儲用於單個鍵的多個值。

當您編寫ht.put(1,「student2」)時,它將覆蓋與「1」一起並且不再可用的值。

+0

謝謝那麼我應該使用哪種數據結構? – Sara

+1

Hashtable > ht = new Hashtable >();正如@Rohit Jain在他的回答中指出的那樣。 –

1

散列表不允許某個鍵的多個值。當您向鍵添加第二個值時,您將替換原始值。

1

如果您希望爲單個密鑰創建多個值,請考慮使用ArrayList的HashTable。