Map<String, Data> map = new HashMap<String,Data>();
map.put("jan", new Data("RED","M4A1",5,0,0));
如何更改数据对象的值RED?,而不是使用键从地图中获取所有信息并将其重新放入,如下所示:
map.put("jan" new Data("Blue",
map.get("jan").Brand,
map.get("jan").Storage,
map.get("jan").Sold,
map.get("jan").Bought));
那么如何更改数据对象的1个值而不是重做它们呢?
答案 0 :(得分:9)
这取决于Data
是否可变。例如,您可以写:
Data data = map.get("jan");
data.setColor("Blue");
不要忘记地图只包含对象的引用,因此如果更改对象中的数据,如果有人稍后从地图中获取引用,则会看到该更改。
或者如果它是不可变的,它可能有一个withColor
方法,所以你可以写:
Data data = map.get("jan");
map.put("jan", data.withColor("Blue"));
在不了解您的Data
类型(我希望不是您班级的真实姓名)的情况下,我们很难再说了。
(我也希望你的班级没有真正的Pascal字段,我希望这些字段是私有的,但那是另一回事......)
答案 1 :(得分:3)
假设Data
是可变的,您可以设置"RED"
字段:
Map map = new HashMap();
map.put("jan", new Data("RED","M4A1",5,0,0));
// Later...
map.get("jan").setColor("BLUE");
如果Data
不可变,那么您唯一的选择是put
新值,因为您已经写好了。
答案 2 :(得分:1)
假设Data
setter
属性color
:
public class Data {
private String color;
public void setColor(String color) {
this.color = color;
}
}
您只需get
所需的Data
对象并设置其属性:
Data data = map.get("jan");
data.setColor("blue");
答案 3 :(得分:1)
为Data
课程添加适当的设定者,例如
class Data {
setColor(String color){...}
}
map.get("jan").setColor("BLUE");
答案 4 :(得分:0)
请找到代码段:
Map<String, Data> map = new HashMap<String,Data>();
public class Data{
private String color;
public void setColor(String color) {
this.color = color;
}
public String getColor() {
return this.color;
}
publicData(String color){
this.setColor(color);
}
}
map.put("jan", new Data("RED","M4A1",5,0,0));
现在你可以这样做:
Data data = map.get("jan");
data.setColor("black");
map.put("jan",data);
这样可行。
这里的类数据只包含一个字段,即颜色。您可以添加更多字段。 感谢