2015-03-31 3 views
0

je besoin d'un HashMap quelque chose qui ressemble àcarte Hash avec 2 valeurs java

  Map<String, int,ArrayList<String>> table = new HashMap<String, int,ArrayList<String>>(); 

Mais HashMap accepte une seule valeur mappée.

J'ai essayé de mettre en œuvre avec une certaine classe enveloppé qui ressemble

 class Wrapper { 
      int id; 
      ArrayList<String> list = new ArrayList<String>(); 

      //Here get and set methods 
    } 

Et puis mon HashMap ressemble

 Map<String, Wrapper> table = new HashMap<String, Wrapper>(); 

Ce que je besoin est:

Quand je spécifié int valeur à mon HaspMap alors je devrais être en mesure de récupérer ArrayList de cette valeur int.

Comment puis-je faire cela?

+2

Si je le prends correcte, vous pouvez utiliser la carte >>. –

+1

Des sons comme Wrapper devraient inclure la première chaîne et l'int, et être utilisés comme clé. Assurez-vous de remplacer equals et hashCode! – yshavit

Répondre

1

D'abord, HashMap<K,V> implémente Map<K,V>, qui précise:

Un objet qui liste les variables. Une carte ne peut pas contenir de clés en double; Chaque touche peut correspondre à au plus une valeur.

Vous ne pouvez donc pas vraiment avoir deux valeurs, peu importe comment vous les découpez.

Cependant, il semble que vous ne voulez pas deux valeurs, mais deux clés. Lorsque vous spécifiez une chaîne et un int, vous attendez une ArrayList en retour. Si tel est le cas, la suggestion de Sachin de Map<String, HashMap<Integer,ArrayList<String>>> fera l'affaire. Vous pouvez aussi faire une classe qui traite plus bien d'avoir une carte imbriquée:

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 
} 

Et vous pouvez l'utiliser pour votre exemple:

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