我创建了HashMap来存储Brand:Car key value对并插入了两个汽车品牌及其详细信息。但是在调用.get(key)方法时,我获取了最后存储的值。
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);
}
其他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() {
}
}
}
输出 R8 双门跑车 2009年 黑
答案 0 :(得分:0)
你一遍又一遍地重复使用同一辆车。所以,你真的没有在hashmap中插入不同的汽车,你正在插入相同的汽车对象。但是,一个意想不到的副作用是当你改变时,例如汽车的名称,你在地图中到处更改它。
所以,你的代码应该是这样的:
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);
答案 1 :(得分:0)
在Java
对象中存储基于references
的对象。您正在初始化汽车变量one time
并将其分配给Map
的所有密钥。
您需要为Car
中的不同keys
创建不同的Map
个实例。而且您还需要创建类Details
的不同实例。