2016-07-07 19 views
0

Das folgende ist ein Programm, das ich in Java geschrieben habe, um eine ArrayList zu drucken, aber wenn ich die Array-Liste drucke, bekomme ich die gleiche Karte immer und immer wieder gedruckt. sollte ich versuchen, eine andere Art von Datenstruktur zu verwenden, um es zu drucken. Wenn ich keine geeignete Methode finde, werde ich eine POJO-Klasse verwenden. Drucken einer ArrayList <HashMap>

import java.util.HashMap; 
import java.util.ArrayList; 
public class HelloWorld{ 

    public static void main(String []args){ 
     ArrayList<String> nlist = new ArrayList<String>(); 
     ArrayList<String> alist = new ArrayList<String>(); 
     nlist.add("Mich"); 
     nlist.add("Aud"); 
     alist.add("22"); 
     alist.add("20"); 
     HashMap<String,String> response = new HashMap<String,String>(); 
     ArrayList<HashMap<String,String>> responseList = new  ArrayList<HashMap<String,String>>(); 
     for(int i=0; i< nlist.size(); i++){ 
     response.put("Name",nlist.get(i)); 
     response.put("Age",alist.get(i)); 
     responseList.add(response); 
     } 
     System.out.println("Result="+responseList); 
    } 
} 

OUTPUT:

Result=[{Age=20 , Name=Aud},{Age=20 , Name=Aud}] 
+2

Sie rufen nur 'println()' einmal, so sehe ich nicht, wie Sie etwas "immer und immer wieder gedruckt". Kannst du deine Frage klären? –

+3

Sie fügen Ihrer Liste die gleiche HashMap-Instanz mehrmals hinzu. Verschieben Sie 'HashMap response = new HashMap ();' in Ihre Schleife. – Eran

+0

Diese Art von Frage kommt so häufig vor, dass es eine kanonische Antwort dafür geben sollte. – shmosel

Antwort

0

Versuchen Sie, erstellen die Initialisierung des HashMap innerhalb der for Schleife zu bewegen. Der aktuelle Code überschreibt die Schlüssel in derselben Map.

0

Bitte erklären HashMap<String,String> response = new HashMap<String,String>(); innerhalb des for-loop wie folgt:

for(int i=0; i< nlist.size(); i++){ 
HashMap<String,String> response = new HashMap<String,String>(); 
response.put("Name",nlist.get(i)); 
response.put("Age",alist.get(i)); 
responseList.add(response); 
} 

Nach den obigen Änderungen, die Ausgabe ist:

enter image description here

+0

Hallo @MichelleAlvares ist dein Problem gelöst? –

0

Sie müssen eine neue response für jede Iteration der Schleife

for(int i=0; i< nlist.size(); i++){ 
     HashMap<String,String> response = new HashMap<String,String>(); 

     response.put("Name",nlist.get(i)); 
     response.put("Age",alist.get(i)); 
     responseList.add(response); 
    } 
0

Der folgende Code funktioniert:

ArrayList<String> nlist = new ArrayList<String>(); 
     ArrayList<String> alist = new ArrayList<String>(); 
     nlist.add("Mich"); 
     nlist.add("Aud"); 
     alist.add("22"); 
     alist.add("20"); 

     ArrayList<HashMap<String, String>> responseList = new ArrayList<HashMap<String, String>>(); 
     for (int i = 0; i < nlist.size(); i++) { 
      HashMap<String, String> response = new HashMap<String, String>(); 
      response.put("Name", nlist.get(i)); 
      response.put("Age", alist.get(i)); 
      responseList.add(response); 
     } 
     System.out.println("Result=" + responseList); 
    } 

innerhalb der Definition Antwort für Schleife ..

0

Jedesmal, wenn Aufruf geschieht, wenn die Antwortwerte wie erwartet werden, werden die formalen Parameter durch aktuelle Parameter ersetzt und die duplizierten Schlüssel von responseList werden durch den aktuellen Wert (letzte Iteration) ersetzt. Das Definieren der Antwort innerhalb der Schleife löst das Problem.

Verwandte Themen