2010-08-11 6 views
2

J'ai le code suivant qui ajoute des tableaux à un hashmap mais je veux accéder à ces tableaux pour y travailler plus tard. Je suis arrivé jusqu'ici mais ne peut pas comprendre le reste à le faire fonctionner ....Valeurs Hashmap Java pour Array

import java.util.HashMap; 
import java.util.Iterator; 
import java.util.Map.Entry; 

    public static void main(String[] args) { 

     String[][] layer1 = { 
      {"to1", "TYPE1", "start"}, 
      {"to2", "TYPE1", "start"} 
     }; 

     String[][] layer2 = { 
      {"to3", "TYPE2" ,"item1"}, 
      {"to3", "TYPE2" ,"item2"} 
     }; 

     HashMap<String,Object> hashMap = new HashMap<String,Object>(); 
     hashMap.put("layer1", layer1); 
     hashMap.put("layer2", layer2); 

     Iterator<Entry<String, Object>> iterator = hashMap.entrySet().iterator(); 
     while(iterator.hasNext()){ 
      hashMap.values().toArray(); 
      for (???) { 
       // lets print array here for example 
      } 
     }   

    } 

Répondre

6

comme les devoirs Odeurs, mais quelques suggestions -

  • il n'y a aucune raison pour que votre hashmap pour être de la forme <String,Object> - faites-en <String, String[][]>, car c'est ce que vous stockez.

Vous itérez deux fois. Vous pouvez soit - parcourir la carte, soit les clés, les valeurs ou les entrées. Chaque élément est une valeur de retour d'itérateur, par ex.

for (String[][] s:map.values()){ 
... 
} 
  • hashmap.values.toArray vous donne tout le contenu, ce qui est la même chose que votre iterator est en train de faire. Si vous parcourez seulement le contenu, vous n'utilisez pas vraiment une carte, car vous n'utilisez jamais le fait que vos valeurs sont disponibles par clé.

+0

pas de devoirs ... il suffit de mélanger trop de langues pour apprendre l'atm :) Merci! – EddyR

0

Votre boucle while devrait ressembler -

 while(iterator.hasNext()){ 
      String[][] arr = (String[][])iterator.next().getValue(); 

      for (String[] strings : arr) { 
       for (String string : strings) { 
        System.out.println(string); 
       } 
      } 
     } 
0

Votre code est mal formé ici:

while(iterator.hasNext()){ 
    hashMap.values().toArray(); 
    for (???) { 
     // lets print array here for example 
    } 
}  

Vous essayez de itérer en utilisant le Iterator "iterator" mais à côté vous invite à

hashMap.values().toArray(); 

Pour obtenir l'article suivant de la boucle, vous devez utiliser iterator.next(); pour aller le chercher. Aussi est bon de changer le "Object" par String [] [] ou List<String[]> or List<List<String>>.

import java.util.HashMap; 
import java.util.Map; 
import java.util.Iterator; 
import java.util.Map.Entry; 

public static void main(String[] args) { 

    String[][] layer1 = { 
     {"to1", "TYPE1", "start"}, 
     {"to2", "TYPE1", "start"} 
    }; 

    Map<String,String[][]> map= new HashMap<String,String[][]>(); 
    map.put("layer1", layer1); 

    Iterator<Entry<String, String[][]>> iterator = map.entrySet().iterator(); 
    while(iterator.hasNext()){ 
     Entry<String, String[][]> entry = iterator.next(); 
     System.out.println("Key:" + entry.getKey()); 

     String[][] value = entry.getValue(); 
     for(int x=0;x<value.length;x++){ 
     for(int y=0;y<value[x].length;y++){ 
      System.out.println("String[" + x + "][" + y + "]:" + value[x][y]);   
     } 
     } 
    }   
} 

Vous pouvez également utiliser "pour chaque" boucle pour simplifier le code Insted en utilisant le "tout":

for (Entry<String, String[][]> entry : map.entrySet()){ 
    System.out.println("Key:" + entry.getKey()); 
    String[][] value = entry.getValue(); 
    for(int x=0;x<value.length;x++){ 
     for(int y=0;y<value[x].length;y++){ 
      System.out.println("String[" + x + "][" + y + "]:" + value[x][y]);  
     } 
    } 
} 

Ou si vous avez seulement besoin des valeurs:

for (Entry<String, String[][]> entry : map.values()){ 
    String[][] value = entry.getValue(); 
    for(int x=0;x<value.length;x++){ 
     for(int y=0;y<value[x].length;y++){ 
      System.out.println("String[" + x + "][" + y + "]:" + value[x][y]);  
     } 
    } 
} 
1

... il suffit de mélanger trop de langues pour apprendre l'atm

Puis-je suggérer que vous devez arrêter et prendre le temps d'apprendre Java correctement. Votre code a l'air d'essayer d'écrire "perlish" ... tableaux associatifs et tableaux au lieu des types appropriés. Le résultat final est un code Java lent et fragile par rapport au code conçu et écrit en utilisant la mentalité Java.

Il peut sembler que vous êtes productif, mais ce que vous produisez est susceptible d'être problématique à l'avenir.