哈希映射2个值Java
问题描述:
我需要一个HashMap一些东西,它看起来像哈希映射2个值Java
Map<String, int,ArrayList<String>> table = new HashMap<String, int,ArrayList<String>>();
但HashMap中只接受一个映射值。
我试着用一些包装类,它看起来像
class Wrapper {
int id;
ArrayList<String> list = new ArrayList<String>();
//Here get and set methods
}
然后我的HashMap的样子
Map<String, Wrapper> table = new HashMap<String, Wrapper>();
我需要什么来实现这样的:
当我指定int值到我的HaspMap那么我应该能够检索该int值的ArrayList。
我该怎么做?
答
首先,HashMap<K,V>
实现Map<K,V>
,其指定:
将键映射到值的对象。地图不能包含重复的键;每个键可以映射到最多一个值。
所以你不能真正拥有“两个”值,不管你如何分片。
但是,好像你不想要两个值,而是两个键。当你指定一个字符串和 int时,你期望返回一个ArrayList。如果是这种情况,Sachin的建议Map<String, HashMap<Integer,ArrayList<String>>>
将完成这项工作。你也可以将一类具有一个嵌套的地图更漂亮优惠:
public class NestedHashMap2<K, L, V> extends HashMap<K, HashMap<L,V>> {
public V put(K k, L l, V v){
if(! containsKey(k)){
put(k, new HashMap<L,V>());
}
return get(k).put(l, v);
}
public V get(K k, L l){
if(! containsKey(k)) return null;
return get(k).get(l);
}
//Expand as needed
}
然后你可以用它为你的例子:
NestedHashMap2<String,Integer,ArrayList<String>> m = new NestedHashMap2<>();
ArrayList<String> a = new ArrayList<String>();
a.add("Element");
m.put("First",2,a);
ArrayList<String> a2 = m.get("First",2); //--> a2 = a
如果我把它正确的,那么你可以使用地图 >>。 –
2015-03-31 04:23:47
听起来像Wrapper应该包含第一个字符串和int,并将其用作键。一定要覆盖equals和hashCode! – yshavit 2015-03-31 04:24:25