我有一個Set對象,我使用這個集合來確保當我向該集合中添加一個元素時,它不會被添加。這是比較容易的部分,只要使用Set.add();
但這完成後我需要參考設置的對象。獲取對集合中的副本的引用
我的意思是有.add()
不返回布爾值,但是你試圖添加的實際對象(如果它沒有被添加,那麼在集合中)。是否已經有一個Set實現來實現這個功能,還是我必須自己寫?
此刻我使用了Set.add()
,如果它返回false,我使用迭代器來查找集合中的一個。雖然這有效,但我覺得它很難看。特別是在使用HashSet實現時,應該能夠使用hashcode更快地找到對象。有任何想法嗎?
編輯:哇,在很短的時間內答案很多,謝謝。好了,我想要做的就是創建一個從一些地方加載數據,並根據其創建對象一定的數據結構。該數據可能包含重複的,如果我用一組和只需要這一個組,但數據結構需要將引用添加到這些獨特的對象在數據結構的其他對象,這將不會是一個問題,所以我需要引用集合中的(唯一)對象。此外,我不能只是沒有加載已經包含在該組中的數據,因爲有鏈接到它的更多(唯一)的數據,這也增加,與已經包含在設置爲數據的引用一起。爲了說明的目的(因爲上面的解釋是遠不清楚),我會在這裏給出一個例子:
數據:
foo bar 1 3 1 4 2 5
數據結構網絡化:
Set<Foo> totalFooSet
Set<Bar> totalBarSet
富:
sometype data
Set<Bar> barSet
酒吧:
sometype data
Set<Foo> fooSet
這有點像多對多的關係。
我不確定這裏是否有一些主要的設計缺陷,我已經與其他人一起查看過,我們無法弄清楚如何以不同的方式做到這一點。我喜歡使用的HashMap的想法,所以我將創建一個子類,並添加一個addAndReturn()函數來了。
但是如果你添加一個元素並且'add'返回'false',那麼你**知道**重複的元素是你正在嘗試添加的元素! – vulkanino 2012-02-08 09:25:06
除非你嚴重強姦Object.equals()'的合約,否則不需要這樣做,因爲不會被添加到Set的對象與已經在該集合中的對象相同。只要使用你已有的對象。如果你設法打破equals(),你應該使用其他方法,例如使用'Map'。 – Bombe 2012-02-08 09:29:52
你能解釋這種情況下的用例嗎?我很想知道爲什麼你需要參考原始對象? – beny23 2012-02-08 09:30:38