我们是否可以实现一个键和两个值的 HashMap。就像HashMap一样?
请帮助我,同时告诉(如果没有办法)任何其他方式来实现以一个为键的三个值的存储?
原文由 vidhya 发布,翻译遵循 CC BY-SA 4.0 许可协议
我们是否可以实现一个键和两个值的 HashMap。就像HashMap一样?
请帮助我,同时告诉(如果没有办法)任何其他方式来实现以一个为键的三个值的存储?
原文由 vidhya 发布,翻译遵循 CC BY-SA 4.0 许可协议
不,不仅仅是 HashMap
。您基本上需要一个 HashMap
从键到值集合。
If you’re happy to use external libraries, Guava has exactly this concept in Multimap
with implementations such as ArrayListMultimap
, HashMultimap
, LinkedHashMultimap
等等
Multimap<String, Integer> nameToNumbers = HashMultimap.create();
System.out.println(nameToNumbers.put("Ann", 5)); // true
System.out.println(nameToNumbers.put("Ann", 5)); // false
nameToNumbers.put("Ann", 6);
nameToNumbers.put("Sam", 7);
System.out.println(nameToNumbers.size()); // 3
System.out.println(nameToNumbers.keySet().size()); // 2
原文由 Jon Skeet 发布,翻译遵循 CC BY-SA 4.0 许可协议
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4.1k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
1 回答2.1k 阅读✓ 已解决
你可以:
Map<KeyType, List<ValueType>>
。Map<KeyType, WrapperType>
。Map<KeyType, Tuple<Value1Type, Value2Type>>
。例子
1. 以列表为值的映射
这种方法的缺点是列表并不完全绑定到两个值。
2.使用包装类
这种方法的缺点是您必须为所有这些非常简单的容器类编写大量样板代码。
3. 使用元组
这是我认为最好的解决方案。
4.多张地图
此解决方案的缺点是这两个地图相关性并不明显,程序错误可能会导致两个地图不同步。