哈希映射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。

我该怎么做?

+2

如果我把它正确的,那么你可以使用地图 >>。 – 2015-03-31 04:23:47

+1

听起来像Wrapper应该包含第一个字符串和int,并将其用作键。一定要覆盖equals和hashCode! – yshavit 2015-03-31 04:24:25

首先,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