在哈希表中,可以使用键/值对来存储信息。
在 Java 中,Hashtable 类接受单个键的单个值。以下是尝试将多个值关联到单个键的示例:
Hashtable<String, String> ht = new Hashtable<String, String>();
ht.put("Answer", "42");
ht.put("Hello", "World"); // First value association for "Hello" key.
ht.put("Hello", "Mom"); // Second value association for "Hello" key.
for (Map.Entry<String, String> e : ht.entrySet()) {
System.out.println(e);
}
为了尝试将多个值("World"、"Mom")包含到单个键("Hello")中,我们最终会得到以下结果以打印 Hashtable 中的条目:
Answer=42
Hello=Mom
"Hello" 和 "World" 的键/值对不在 Hashtable 中 -- 只有第二个 "Hello" 和“Mom”条目在 Hashtable 中。这表明不能有多个值与Hashtable 中的单个键相关联。
这里真正需要的是multimap,它允许将多个值关联到一个键。
多重映射的一个实现是Multimap from Google Collections:
Multimap<String, String> mm = HashMultimap.create();
mm.put("Answer", "42");
mm.put("Hello", "World");
mm.put("Hello", "Mom");
for (Map.Entry<String, String> e : mm.entries()) {
System.out.println(e);
}
这类似于上面使用Hashtable 的示例,但行为完全不同——Multimap 允许将多个值关联到单个键。上述代码执行结果如下:
Answer=42
Hello=Mom
Hello=World
可以看出,对于"Hello"键,"Mom"和"World"的值与之关联。与Hashtable 不同,它不会丢弃其中一个值并将其替换为另一个值。 Multimap 能够为每个键保留多个值。