【问题标题】:JAVA, in treemap want to change value, in object?JAVA,在树形图中想要改变值,在对象中?
【发布时间】:2017-07-07 22:41:01
【问题描述】:

所以,我将 Object 类声明为 TreeMap 值。

public class Info {
    String name;
    String pName;// 부서이름
    String psw;//관리자비번
    public Info(String name,String pName, String psw){
       this.name = name;
       this.pName=pName;
       this.psw=psw;
    }

    public Info(String name,String psw){
       this.psw=psw;
    }

    public Info(String name){
        this.name=name;
    }
}


public class menu {
    Scanner sc = new Scanner(System.in);
    static TreeMap<String, Info> map = new TreeMap<String, Info>();
    public menu() {// constructor
        map.put("admin", new Info("admin","1234"));// initialize root 
    }
    private void adminChangePsw() {
        System.out.print("new password :");
        String data = sc.next();
        map.replace(admin, <value>);// howww?
    }

我想更改管理员密码,我尝试在信息类下添加以下代码,

public Info(String psw){
    this.psw=psw;
}

但是这段代码也有字符串类型,所以我猜我不能用它

    public Info(String name){
        this.name=name;
    }

经过几次尝试,发现replace(K,V)是我现在需要的, 但是如果 value 是 Object Class,我不知道该怎么做。

public void setPsw(String data){
    psw=data;
}

map.replace("admin",map.get("admin").setPsw(data));

我也试过了(笑),当然没用..

谁给我提示,谢谢:>

【问题讨论】:

  • 你的标题很好恕我直言

标签: java object dictionary replace treemap


【解决方案1】:

任何集合都只包含对对象的引用。不是对象本身。当您添加一个值/元素时,您所做的就是将对该对象的引用添加到集合中。

这意味着当您更新一个可变对象时,您不需要将它放回集合中。

map.get("admin").setPsw(data);

这将获取对Info 的引用并在其上调用setPsw

注意:如果你有一个不可变的值并且你得到一个新的值,你必须替换它。

例如说你有

Map<String, Integer> map = ....
map.put("admin", map.get("admin") + 1); // the + 1 creates a new Integer reference.

顺便说一句,在 Java 8 中你可以这样做

map.compute("admin", (k, v) -> v == null ? 1 : v + 1);

【讨论】:

  • 如果有人想这样做,我会在尝试按值排序时发出大量健康警告。
猜你喜欢
  • 2019-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-20
相关资源
最近更新 更多