2015-03-31 133 views
0

我需要一個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

回答

1

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