2017-02-18 49 views
2

因此,我將Object類聲明爲TreeMap值。JAVA,在樹形圖中想要改變值,在對象中?

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; 
    } 

一些更多的嘗試後,發現替換(K,V)是什麼,我現在需要的, 但我不知道該怎麼辦,如果值是Object類。

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

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

我想這也是(笑),當然它沒有工作..

任何人給我提示,請,謝謝:>

+1

你的標題被罰款恕我直言 –

回答

5

任何集合只包含對象的引用。不是物體本身。當你添加一個值/元素時,你所做的就是將該對象的引用添加到集合中。

這意味着當你更新一個可變對象時,你不需要將它放回到集合中。

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. 

BTW在Java 8,你可以做

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

我會穿上試圖通過值排序一個巨大的健康警告,如果有人想這樣做的。 –

+0

謝謝你,先生!並注意:3 –