迭代哈希表java中的键的所有值

时间:2013-08-18 17:44:34

标签: java loops hashtable key-value

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

如何迭代“单个密钥”的所有值?

key:1 values: student1, student2

4 个答案:

答案 0 :(得分:5)

Hashtable不会为单个密钥存储多个值。

当您编写ht.put(1,“student2”)时,它会覆盖“1”的值并且不再可用。

答案 1 :(得分:5)

您需要使用:

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

并为关联的List中的特定键添加新的String值。

话虽如此,您应该使用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);

答案 2 :(得分:1)

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

答案 3 :(得分:1)

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