2
Hashtable<Integer,String> ht = new Hashtable<Integer,String>();
ht.put(1,"student1");
ht.put(1,"student2");

如何遍历“单个键”的所有值?

key:1 values: student1, student2

4

4 回答 4

5

Hashtable 不会为单个键存储多个值。

当您编写 ht.put(1, "student2") 时,它会覆盖与 "1" 一起出现的值,并且不再可用。

于 2013-08-18T17:46:45.133 回答
5

你需要使用:

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

并为关联中的特定键添加新的字符串值List

话虽如此,您应该使用 aHashMap而不是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")); 
}

如果可以使用 3rd 方库,另一种选择是使用Guava's 。Multimap

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

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

Collection<String> values = myMultimap.get(1);
于 2013-08-18T17:49:00.373 回答
1

Hashtable 不允许一个键有多个值。当您向键添加第二个值时,您将替换原始值。

于 2013-08-18T17:47:01.383 回答
1

如果您想要单个键的多个值,请考虑使用 ArrayLists 的 HashTable。

于 2013-08-18T17:48:27.967 回答