带有2个值的哈希映射java

时间:2015-03-31 04:19:07

标签: java hashmap

我需要一个看起来像

的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。

我该怎么做?

1 个答案:

答案 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