2016-10-02 22 views
0

Ich habe HashMap zum Speichern von Marke: Autoschlüssel Wertpaar erstellt und zwei Automarken und deren Details eingefügt.Aber beim Aufruf .get (Schlüssel) -Methode bekomme ich zuletzt gespeicherte Werte.Falsche Werte in HashMap

public class MapTest { 
public static void main(String args[]) { 

    MapTest map=new MapTest(); 
    map.test(); 

} 
public void test() { 
    HashMap<String,Car> vehicle=new HashMap<>(); 
    Details def=new Details(); 
    Car car=new Car(); 
    car.name="Mustang"; 
    def.model="SportsRoof"; 
    def.model_no=1969; 
    def.color="Blue"; 
    car.features.add(def); 
    vehicle.put("Ford",car); 
    car.name="R8"; 
    def.model="Coupe"; 
    def.model_no=2009; 
    def.color="Black"; 
    car.features.clear(); 
    car.features.add(def); 
    vehicle.put("Audi",car); 
    System.out.println(vehicle.get("Ford").name); 
    System.out.println(vehicle.get("Ford").features.get(0).model); 
    System.out.println(vehicle.get("Ford").features.get(0).model_no); 
    System.out.println(vehicle.get("Ford").features.get(0).color); 
} 

Andere Clsses

public class Car { 
    String name; 
    List<Details> features=new ArrayList<>(); 
    public Car() { 

    } 
} 
public class Details { 
    String model; 
    int model_no; 
    String color; 
    public Details() { 

    } 
} 
} 

Ausgang R8 Coupe Schwarz

Antwort

0

Sie das gleiche Auto Objekt immer und immer wieder wiederverwendet. Also, Sie haben wirklich nicht verschiedene Autos in die hashmap einfügen, Sie fügen die gleiche Auto-Objekt. Ein unbeabsichtigter Nebeneffekt ist jedoch, dass, wenn Sie z. der Name des Autos, ändern Sie es überall in der Karte.

Also, sollten Sie den Code wie folgt aussehen:

HashMap<String,Car> vehicle = new HashMap<>(); 
Details def= new Details(); 
Car car = new Car(); 
car.name = "Mustang"; 
def.model = "SportsRoof"; 
def.model_no = 1969; 
def.color = "Blue"; 
car.features.add(def); 
vehicle.put("Ford",car); 
// create a new Car object 
car = new Car(); 
car.name = "R8"; 
def.model = "Coupe"; 
def.model_no = 2009; 
def.color = "Black"; 
car.features.clear(); 
car.features.add(def); 
vehicle.put("Audi",car); 
+0

Also muss ich zwei Auto-Objekte erstellen? –

+0

Ja ... Ich aktualisiere jetzt mit Code ... 1 min –

0

In Java Objekte werden auf references gespeichert basiert. Sie initialisieren nur die Fahrzeugvariable one time und weisen sie allen Schlüsseln Ihres Map zu.

Sie müssen verschiedene Car Instanzen für verschiedene keys in Ihrem Map erstellen. Und Sie müssen auch verschiedene Instanzen der Klasse Details erstellen.