如何更新MAP中的值之一

时间:2011-05-22 08:29:04

标签: java map

我有一个地图对象testMap,声明为HashMap<String, Test>

Test是一个简单的类,其中包含对Object和两个String值的引用。

public class Test {

  private String name;
  private String id;
  private Object val;


public Test(Object val,String name.String id){
  this.val =val;
  this.id=id;
  this.name = name;
}

我想仅在哈希地图“testMap”中更新“名称”。我怎么能这样做?

4 个答案:

答案 0 :(得分:1)

Test test = testMap.get("key");
if (test != null) {
   test.name = "new name";
}

答案 1 :(得分:0)

您需要将name属性的可见性更改为public或向其添加设置器:

public class Test {

  private String name;
  private String id;
  private Object val;


public Test(Object val,String name, String id){
  this.val =val;
  this.id = id;
  this.name = name;
}

public void setName(String name) {
  this.name = name;
}

然后,要更改你的名字,你需要

Test test = testMap.get("key");
if (test != null) {
   test.setName("new name");
}

如果您还要更新Map键,则需要

Test test = testMap.remove("oldKey");
if (test != null) {
   test.setName("newKey");
   test.put("newKey", test);
}

答案 2 :(得分:0)

Test test = testMap.remove("name");
if(test != null)
   test.put("newname",test);

答案 3 :(得分:0)

由于名称是私有字段,因此您无法使用Test的当前实现。您可以将其公开或将getter / setter方法添加到Test类(当前Test类似乎完全没用,除非您没有错过某些代码)。

之后,您可以使用必填字段替换所需的Test实例,或者更新名称。代码:

public class Test {
  public String name;
  public String id;
  public Object val;

  public Test(Object val,String name.String id){
    this.val =val;
    this.id=id;
    this.name = name;
  }
}

Map<String, Test> testMap = new HashMap<String, Test();
...
Test test = testMap.get(key);
test.name = newName;
testMap.put(key, test);

// or 
Test test2 = testMap.get(key);
testMap.put(key, new Test(test2.val, newName, test2.id));