2012-09-20 31 views
3
Map<String, Data> map = new HashMap<String,Data>(); 
map.put("jan", new Data("RED","M4A1",5,0,0)); 

我怎樣才能更改數據對象的值RED?沒有走出與關鍵地圖的所有信息,並把它放回,這樣的:HashMap <String,Object>如何替換Object的1個值?

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

所以,我怎麼能更改數據對象的1個值而不是全部重做它們?

回答

7

這取決於Data是否可變。例如,你可以寫:

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

不要忘記,在地圖只包含參考的對象,因此,如果您更改對象中的數據,這種變化的時候,如果看到稍後有人從地圖中提取參考。

或者,如果它是不可變的,它可能有一個withColor方法,所以你可以寫:

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

不知道更多關於你的Data類型(我希望不是你們班的真實姓名)很難再說了。

(我也希望你的類並沒有真正有帕斯卡爾 - 套管領域,我希望這些字段是私有的,但是這是一個不同的問題...)

+0

如果我理解正確,OP不希望得到操作等。, – kosa

+0

@Nambari「,而沒有用鑰匙把所有的信息從地圖中拿出來放回去。」我的解釋是,他只是不想創建新的對象,並把它們放回地圖中。 – Brian

+0

它似乎是可變的。第一個選擇完成了這項工作。謝謝。 – user1621988

1

假設Datasettercolor財產:

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

假設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

請找到代碼片段:

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"); 
map.put("jan",data); 

這將工作。

這裏類Data僅包含一個字段,即顏色。您可以添加更多字段。 謝謝

+0

你能解釋一下你的答案嗎? –

+0

現在請檢查這個。 –

相關問題