2011-07-11 46 views

回答

2

只要您將同一個對象添加到兩個對象,這正是應該發生的事情。 (我是否錯過了什麼?)

+0

這不是一個答案,應該是一個評論。 -1 –

+1

順便說一下,你的答案基本上和我說的完全一樣...... – aardvarkk

+0

@ahmet如果是這樣的話,最好標記答案爲「不是答案」。順便說一句,我認爲這是一個答案,儘管是單線。 – razlebe

2

在Java中,集合中的對象與其引用一起存儲。因此,如果您修改了一個對象,它將在其引用的任何位置更新。你不應該關心這一點。

爲了使用都同步你應該實現一個新的類,這裏的模板:

class MyCollection{ 
    private TreeSet treeSet; 
    private ArrayList arrayList; 

    public synchronized void add(Object o){ 
     treeSet.add(o); 
     arrayList.add(o); 
    } 
} 

事情上面我認爲:

  • 裏面的收藏保密,最小特權原則。
  • ​​關鍵字提供一致的多線程併發。

事情我還沒有考慮以上:

  • 泛型類型
  • add方法應該返回boolean爲所有Java Collection就做。

您應該實現自己的代碼以獲得更好的解決方案,但通常這就是這個想法。

編輯:另一種解決方案是寫自己的TreeSet中和ArrayList包裝(使用TreeSet和ArrayList的下方),並添加東西時,因爲你重寫add()方法,你可以添加其他的東西。但這不是一個鬆散的耦合練習。也許Obse​​rver Framework還有另一個解決方案。