HashMaps允许映射键值对;如果有额外的价值,建议是什么?
即HashMap映射键值对:键,值
映射的最佳方式是什么:Key,Value,Value1?
感谢。
答案 0 :(得分:5)
我喜欢的一个不错的,干净的解决方案是编写一个匹配一对的实用程序类:
public class Pair<U, V> {
private U first;
private V second;
public Pair(U first, V second) {
this.first = first;
this.second = second;
}
// getters for "first" and "second"
然后将其作为地图中的Value
:
Map<Key, Pair<U,V>> map;
但是,这将是您始终只有两个值的情况。如果您觉得将来可能会有更多内容,List<Object>
或Set<Object>
最好在地图中用作Value
。
编辑您也可以使用静态创建者方法:
public static <U, V> Pair<U, V> newInstance(U first, V second) {
return new Pair<U, V>(first, second);
}
答案 1 :(得分:2)
标准解决方案是将两个值封装在自己的数据结构中。
数据结构可能特定于您的情况,或者您可以将简单的Pair
类混合在一起。
然后,您可以使用结构的实例作为列表值,例如map.put(key, new Pair(foo, bar));
还可以选择使用专门的Map
实施,例如http://commons.apache.org/collections/api-3.1/org/apache/commons/collections/MultiMap.html
答案 2 :(得分:1)
你可以:
使用列表作为值
Map<String,List<String>> map = new HashMap<String,List<String>>();
map.put("key",Arrays.asList("one","two" );
map.get("key").get(0);
map.get("key").get(1);
使用数组作为值,并引用为
Map<String,String[]> map = new HashMap<String,String[]>();
map.put( "key", new String[]{"one", "two"});
map.get("key")[0];
map.get("key")[1];
使用自定义通用类来保存两个值
Map<String,Pair> map = new HashMap<String,Pair>();
map.put( "key", new Pair<String,String>("one","two"));
map.get("key").val1();
map.get("key").val2();
答案 3 :(得分:0)
您可以使用Map&lt;键,列表与LT; MyVOClazz&gt; &GT;
public class MyVOClazz{
private String value1;
private String value2;
//getters, setters for value1 and value2
}