2015-03-12 1 views
0

Supposons que je LinkedhashMap<String, List> myLHM = new LinkedHashMap<>()clés en double dans LinkedHashMap

Les valeurs de myLHM:.

<Roy,[1,2,3]> 
<Roy,[14,15,16]> 
<Neha,[1,5,6]> 
<Neha,[11,12,13]> 
<Jane,[11,8,9]> 

Dans ci-dessus par exemple, Roy et Neha est répétitif/dupliquer.

Est-il possible de contenir des clés en double dans myLHM? Parce que je ne suis pas en mesure de stocker les clés en double

Non? Alors quelle est l'alternative à LinkedHashMap pour contenir des clés en double?

TIA!

Edit: Ces deux Roy et Neha sont chacun la même personne

+0

Que voulez-vous vraiment? avec duplication ou sans duplication? – user3289108

+0

avec duplication – DancingMonkeyOnLaughingBuffalo

+0

Ok, qu'est-ce que 'Roy' et' Neha'? Sont-ils une chaîne ou une clé? Si la clé, vous devez comprendre ce que si la clé d'abord. 'Key' est toujours unique. – user3289108

Répondre

1

Ajouter une liste d'éléments par clé. Chaque fois que vous insérez, si la clé a été trouvée, ajoutez-la à la collection. Si non trouvé, ajoutez une nouvelle colelction avec l'élément actuel.

2

Je ne connais pas de carte dans la bibliothèque java standard qui peut contenir des clés en double, mais Guava est une excellente extension des collections java normales (et plus) effectuées par Google. Là, vous avez Multimap qui peut contenir plusieurs valeurs pour la même clé (je suppose que c'est ce que vous voulez à la fin). Le principal avantage que je trouve dans l'utilisation d'une telle bibliothèque/implémentation est qu'elle prendra soin de tout ce qui est associé au stockage des valeurs et que vous n'avez pas besoin de vous soucier de l'implémenter vous-même. PS: La goyave ne concerne pas seulement les collections, ce qui est un autre avantage pour moi.

1

J'ai résolu ceci par moi-même.

Ce que je l'ai utilisé est:

LinkedHashMap<String, ArrayList<ArrayList>> myLHM = new LinkedHashMap<>() ; 

Inséré dans comme:

ArrayList<ArrayList> multiDimArray = new ArrayList<>(); 

ArrayList list = new ArrayList(); 
list.add("abc");//some string 1 
list.add("lmn");//some string 2 
list.add("xyz");//some string 3 

multiDimArray.add(list); 
myLHM.put("abc"/*use your variable OR pass value like myList.get(position)*/,multiDimArray); 

valeurs/Récupéré comme les cheveux:

List tempNames=new ArrayList(); 
Iterator myVeryOwnIterator = myLHM.keySet().iterator(); 
while(myVeryOwnIterator.hasNext()) { 
    tempNames.add(myVeryOwnIterator.next()); 
} 

ArrayList<ArrayList> tempArrayList = new ArrayList(); 
for (int i=0;i<tempNames.size();i++){ 
    tempArrayList.addAll(myLHM.get(tempNames.get(i))); 
} 

String item = null; int year = 0; int amount = 0; 
for (int i=0;i<tempArrayList.size();i++) { 
    for (int j=0;j<tempArrayList.get(i).size();j++){ 
     if(j==0){ 
      item = (String) tempArrayList.get(i).get(j); 
      item = item.replaceAll("\\s", "_"); 
      } else if (j==1){ 
      year = Integer.valueOf(tempArrayList.get(i).get(j).toString()); 
      } else if (j==2){ 
      amount = Integer.valueOf(tempArrayList.get(i).get(j).toString()); 
      } else { 
      Log.e("Problem","for loop error"); 
      } 
    } 
    db.execSQL("INSERT INTO ch // my insert query... 
    VALUES(" +"'" + item +"'," + year +"," + amount +"," + id +");"); 
} 
+0

Vous devriez accepter cette réponse comme réponse correcte, donc la question a une réponse acceptée. –