我需要一个看起来像
的HashMap 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>( );
我需要的是:
当我为我的HaspMap指定int值时,我应该能够检索该int值的ArrayList。
我该怎么做?
答案 0 :(得分:1)
首先,HashMap<K,V>
实现Map<K,V>
,它指定:
将键映射到值的对象。地图不能包含重复的键;每个键最多可以映射一个值。
所以你真的没有&#34;两个&#34;价值,无论你如何分割它。
但是,您似乎不想要两个值,而是两个键。当您指定String 和一个int时,您期望返回一个ArrayList。如果是这种情况,萨钦对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