2016-05-04 43 views
0

我需要爲HashMap的值提供getter方法,但是我不能允許對返回的集合或其元素進行更改,然後這些元素將反映在原始HashMap中我是獲取從中設置的值。我目前在做它像這樣:返回副本或集合的克隆以防止可變性

public Collection<T> getCollection() { 
    Collection<T> collection = map.values(); 
    return collection; 
} 

這是否會充分實現我所要做的,或將更改返回集合中我的HashMap仍然反映?我問的原因是因爲我知道集合的任何更改都返回了我的Map的.values()方法反映在原始的Map中。謝謝!

+0

」將更改爲返回的集合仍然反映在我的HashMap?「 - 你有沒有試過看? – khelwood

+0

我會,但不幸的是我沒有訪問我的機器,我只是在文本編輯器中編寫代碼。 – transiti0nary

+0

堆棧溢出不是您運行代碼的替代品。 – khelwood

回答

2

如果您希望值的視圖,您可以使用Collections.unmodifiableCollection

public Collection<T> getCollection() { 
Collection<T> view = Collections.unmodifiableCollection(map.values()); 
return view; 
} 

這會給你一個view,即:客戶端不能突變,但突變是他們可見。 「

+1

謝謝,這很有道理:) – transiti0nary