2016-07-02 9 views
0

ich zur Zeit ein Problem mit meinem Code bin vorWie ein ein Arraylist speichern <HashMap <String, String >> mit einem einzigen HashMap und mehrere Arraylist

ich versuche in einem Arraylist> die Werte von a zu setzen Hashmap die ihre Werte aus einem anderen Arraylist wird

Hier ist der Code:

ArrayList<HashMap<String, String>> AL_route_bus_collection_a = new ArrayList<HashMap<String,String>>(); 

HashMap<String,String> HM_route_bus_collection_a = new HashMap<String, String>(); 


for(int i = 0;i<routeNo_set.size();i++) { 

    HM_route_bus_collection_a.put("route_no", routeNo_set.get(i)); 
    HM_route_bus_collection_a.put("address", address_set.get(i)); 
    HM_route_bus_collection_a.put("bus_type", busType_set.get(i)); 

    AL_route_bus_collection_a.add(HM_route_bus_collection_a); 
} 
for (HashMap<String, String> hashMap : AL_route_bus_collection_a) { 
    System.out.println(hashMap.keySet()); 
    for (String key : hashMap.keySet()) { 
     System.out.println(hashMap.get(key)); 
    } 
} 

aber ich lande nur der Wert routeNo_set (2) erhalten, address_set (2), busType_set (2) in meiner Arraylist wiederholt 3 mal

output screenshot

jede Hilfe wäre sehr hilfreich seine Dank im Voraus

Antwort

0

Ihr Problem aus der Tatsache, dass Sie immer die gleiche Karte in Ihrer Schleife verwenden und speichern Sie es dreimal in der Arraylist .

Deshalb erhalten Sie die gleichen Ergebnisse, weil es die gleiche Karte ist und die Methode put() den alten Wert für den Schlüssel ersetzt, wenn der angegebene Schlüssel bereits in der Karte vorhanden ist.

Sie müssen jedes Mal, wenn Sie die Schleife durchlaufen, eine neue Karte einfügen.

sollte der folgende Code arbeiten:

ArrayList<HashMap<String, String>> AL_route_bus_collection_a = new ArrayList<HashMap<String,String>>(); 

for(int i = 0;i<routeNo_set.size();i++) { 

    HashMap<String,String> HM_route_bus_collection_a = new HashMap<String, String>(); 
    HM_route_bus_collection_a.put("route_no", routeNo_set.get(i)); 
    HM_route_bus_collection_a.put("address", address_set.get(i)); 
    HM_route_bus_collection_a.put("bus_type", busType_set.get(i)); 

    AL_route_bus_collection_a.add(HM_route_bus_collection_a); 
} 
for (HashMap<String, String> hashMap : AL_route_bus_collection_a) { 
    System.out.println(hashMap.keySet()); 
    for (String key : hashMap.keySet()) { 
     System.out.println(hashMap.get(key)); 
    } 
} 
+0

vielen Dank dieser es feste –

0

Der Grund, warum Sie nur einen Wert erhalten ist, dass die Hashmap Werte in der Schleife überschrieben werden, weil doppelte Schlüssel in HashMap nicht erlaubt .So Sie immer bekommen die letzten Indexwerte in Ihrer Hashmap.

Wenn Sie also einen Schlüssel mit anderen Werten verwenden möchten, können Sie HashMap<String, ArrayList<String>> verwenden.

Angenommen, Sie möchten nur ein Schlüsselwertpaar, das Sie in Ihrer Arraylist hinzufügen möchten.

Hier ist das Beispiel, Lesen Sie mehr über HashMap

public static void main (String[] args) throws java.lang.Exception 
    { 
     ArrayList<HashMap<String, String>> AL_route_bus_collection_a = new ArrayList<HashMap<String,String>>(); 

     HashMap<String,String> HM_route_bus_collection_a = new HashMap<String, String>(); 

     List<String> routeNo_set = new ArrayList<String>(); 
     routeNo_set.add("first"); 
     routeNo_set.add("second"); 
     routeNo_set.add("third"); 

     List<String> address_set = new ArrayList<String>(); 
     address_set.add("A"); 
     address_set.add("B"); 
     address_set.add("C"); 

     List<String> busType_set = new ArrayList<String>(); 
     busType_set.add("1"); 
     busType_set.add("2"); 
     busType_set.add("3"); 

     for(int i = 0;i<routeNo_set.size();i++) { 

      HM_route_bus_collection_a.put("route_no", routeNo_set.get(i)); 
      HM_route_bus_collection_a.put("address", address_set.get(i)); 
      HM_route_bus_collection_a.put("bus_type", busType_set.get(i)); 

      AL_route_bus_collection_a.add(HM_route_bus_collection_a); 

      HM_route_bus_collection_a = new HashMap<String, String>(); 
      } 
     for (HashMap<String, String> hashMap : AL_route_bus_collection_a) { 
      System.out.println(hashMap.keySet()); 
      for (String key : hashMap.keySet()) { 
       System.out.println(hashMap.get(key)); 
      } 
     } 
} 

prüfen Ausgang here

+0

nie –

+0

eine Ausnahme sehr schlechte Praxis werfen @RahulRavindran ich Ihnen einen Beispielcode nur gab. Sie müssen die genaue Ausnahme auslösen und in der Aufrufmethode behandeln. – Ravikumar