java - Java中的多值哈希表

标签 java collections map hashtable multimap

哈希表中的同一个键可以有多个值吗?如果没有,你能推荐任何可以使用的类或接口(interface)吗?

最佳答案

没有。这就是哈希表的想法。

但是,您也可以使用 Map<YourKeyObject, List<YourValueObject>> 自行滚动。以及一些用于创建列表的实用方法(如果列表不存在),或者使用类似 Multimap 的方法来自 Google Collections .

示例:

String key = "hello";
Multimap<String, Integer> myMap = HashMultimap.create();
myMap.put(key, 1);
myMap.put(key, 5000);
System.out.println(myMap.get(key)); // prints either "[1, 5000]" or "[5000, 1]"
myMap = ArrayListMultimap.create();
myMap.put(key, 1);
myMap.put(key, 5000);
System.out.println(myMap.get(key)); // always prints "[1, 5000]"

请注意 Multimap不是自制解决方案的精确等价物; Hashtable 同步其所有方法,而 Multimap不作此类保证。这意味着使用 Multimap 如果你在多个线程上使用它,可能会给你带来问题。如果您的 map 仅在一个线程上使用,则不会有任何区别(而且您应该一直使用 HashMap 而不是 Hashtable)。

关于java - Java中的多值哈希表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1049833/

相关文章:

java - Eclipse 安装程序找不到 JRE

java - 将 Java 数组和基元 (double[][]) 重构为集合和泛型 (List<List<Double>>)

cmath 函数的 C++ 映射

r - ggplot2 中的 geom_map 边界 - 重新审视

java - GridBagLayout 创建非常小的面板

java - 如何在 Eclipse 中配置构建路径条目

java - 为什么 isReachable() 方法总是返回 "false"?

java - 在 Java 8 中合并多个 map

c# - 如何访问 ConcurrentDictionary 以及如何将其序列化?

javascript - 单张空白 map