7
Map<String, Data> map = new HashMap<String,Data>();
map.put("jan", new Data("RED","M4A1",5,0,0));

如何更改 Data 对象的值 RED?,而无需使用密钥从地图中获取所有信息并将其放回,如下所示:

map.put("jan" new Data("Blue",
      map.get("jan").Brand,
      map.get("jan").Storage,
      map.get("jan").Sold,
      map.get("jan").Bought)); 

那么如何更改数据对象的 1 个值而不是全部重做呢?

4

5 回答 5

11

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

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

不要忘记地图只包含对对象的引用,因此如果您更改对象内的数据,那么如果稍后有人从地图中获取引用,就会看到这种变化。

或者如果它是不可变的,它可能有一个withColor方法,所以你可以写:

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

如果不了解您的Data类型(我希望这不是您班级的真名),就很难再说什么了。

(我也希望你的班级没有真正的 Pascal 大小写字段,我希望这些字段是私有的,但那是另一回事......)

于 2012-09-20T16:16:35.177 回答
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写入新值。

于 2012-09-20T16:17:56.210 回答
1

假设Data有一个setterforcolor属性:

public class Data {
  private String color;

  public void setColor(String color) {
    this.color = color;
  }
}

您可以只get需要所需的Data对象并设置其属性:

Data data = map.get("jan");
data.setColor("blue");
于 2012-09-20T16:17:13.123 回答
1

为您的班级添加适当的二传手Data,例如

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


map.get("jan").setColor("BLUE");
于 2012-09-20T16:17:18.177 回答
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");

这将起作用。

这里的数据类只包含一个字段,即颜色。您可以添加更多字段。谢谢

于 2012-09-20T16:48:02.657 回答