HashMap 如何替换对象的1个值?

问题描述 投票:6回答:5
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个值,而不是全部重做?

java object map hashmap
5个回答
11
投票

取决于Data是否可变。例如,您可以写:

Data data = map.get("jan");
data.setColor("Blue");

[不要忘记,地图仅包含对象的reference,因此,如果您更改对象中的数据,则如果以后有人从地图中获取引用,则将看到该更改。

或者,如果它是不可变的,则可能具有withColor方法,因此您可以编写:

Data data = map.get("jan");
map.put("jan", data.withColor("Blue"));

[不了解您的Data类型(我希望不是您班级的真实名称),就很难再说了。

((我也希望您的班级确实没有Pascal大小写的字段,并且我希望这些字段是私有的,但这是另一回事……)


4
投票

假设Data是可变的,您可以设置"RED"字段:

Map map = new HashMap();
map.put("jan", new Data("RED","M4A1",5,0,0));
// Later...
map.get("jan").setColor("BLUE");

如果Data不可更改,那么您唯一的选择就是在写入新值时将put作为新值。


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");

1
投票

例如,在Data类中添加适当的二传手]

class Data {
    setColor(String color){...}
}


map.get("jan").setColor("BLUE");

0
投票

请找到代码段:

© www.soinside.com 2019 - 2024. All rights reserved.