2013-04-12 6 views
5
ArrayList<HashMap<String, Integer>> myList = new ArrayList<HashMap<String, Integer>>(); 

    HashMap<String, Integer> check = new HashMap<String, Integer>(); 

Mam kilka hasms w mojej liście tablic i chcę porównać hadms dla duplikatów takich jak ten 0,1 0,2 0,3 0,4 .... 1,2 1,3 1,4 ..... 2,3 2,4 itd.Pętla przez ArrayList z HashMaps Java

Robiłem zagnieżdżoną pętlę do tego, ale to utknęło jak uzyskać dostęp do hashmap i próbowałem tego

for (int a =0; a<myList.size();a++){ 
      for(int b=a+1; b<myList.size();b++){ 
       for (String key : myList[a].check.keySet()) 
      } 
     } 

Ale to nie działa. Jak mogę uzyskać wszystkie klucze mojej hashmap, jeśli są one na liście? Jak mogę to zrobić?

+2

@BalaR: 'ArrayList' nie może być skierowana w nawiasach kwadratowych. – jlordo

Odpowiedz

7

Operator [] może być używany tylko na tablicach. Lista ma get(int index) sposób, aby uzyskać element w danym indeksie:

for (String key : myList.get(a).keySet()) { 
    ... 
} 

klas Java są udokumentowane: http://docs.oracle.com/javase/6/docs/api/

+2

Możesz również zmienić sposób deklarowania myList: List > myList = new ArrayList >(); – vptheron

+2

@vtheron Jeśli jest to po prostu 'List', wówczas zamiast bezpośrednich indeksów należy używać' Iteratora'; jeśli 'List' ma wartość' LinkedList', indeksowanie będzie powolne. –

7

Oto przykład do iteracji. I stworzył fikcyjne dane, aby przetestować kod

private void ArrayListAndHashMap() 
    { 
     ArrayList<HashMap<String, Integer>> myList = new ArrayList<HashMap<String, Integer>>(); 


     HashMap<String, Integer> data1 = new HashMap<String, Integer>(); 
     data1.put("0",new Integer(1)); 
     data1.put("1",new Integer(2)); 
     data1.put("2",new Integer(3)); 
     data1.put("3",new Integer(4)); 

     HashMap<String, Integer> data2 = new HashMap<String, Integer>(); 
     data1.put("10",new Integer(10)); 
     data1.put("11",new Integer(20)); 
     data1.put("12",new Integer(30)); 
     data1.put("13",new Integer(40)); 

     myList.add(data1); 
     myList.add(data2); 


     for (int a =0; a<myList.size();a++) 
     { 
      HashMap<String, Integer> tmpData = (HashMap<String, Integer>) myList.get(a); 
      Set<String> key = tmpData.keySet(); 
      Iterator it = key.iterator(); 
      while (it.hasNext()) { 
       String hmKey = (String)it.next(); 
       Integer hmData = (Integer) tmpData.get(hmKey); 

       System.out.println("Key: "+hmKey +" & Data: "+hmData); 
       it.remove(); // avoids a ConcurrentModificationException 
      } 

     }  
    } 

wyjście jest

Key: 3 & Data: 4 
Key: 2 & Data: 3 
Key: 10 & Data: 10 
Key: 1 & Data: 2 
Key: 0 & Data: 1 
Key: 13 & Data: 40 
Key: 11 & Data: 20 
Key: 12 & Data: 30