如何在Java中共享ArrayList和TreeSet之间的元素?

时间:2011-07-11 16:59:47

标签: java pointers collections pass-by-reference shallow-copy

我想同时修改ArrayList和TreeSet的元素。

实施例。当我从TreeSet修改元素时,Arraylist中的相应元素也被修改。

2 个答案:

答案 0 :(得分:2)

只要您向两者添加相同的对象,这正是应该发生的事情。 (我错过了什么吗?)

答案 1 :(得分:2)

在Java中,集合中的对象与其引用一起存储。因此,如果您修改对象,它将在引用它的任何位置更新。你不应该担心这一点。

为了同时使用两个同步你应该实现一个新类,这里是模板:

class MyCollection{
    private TreeSet treeSet;
    private ArrayList arrayList;

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

我上面考虑的事情:

  • 内部藏品保持私密,最小特权原则。
  • synchronized关键字提供一致的多线程并发。

我上面没有考虑的事情:

  • 通用类型
  • add方法应该像所有java boolean一样返回Collection

您应该实现自己的代码以获得更好的解决方案,但通常,这就是想法。

编辑:另一个解决方案是编写自己的TreeSet和ArrayList包装器(下面使用treeset和arraylist),并在添加内容时,因为您将覆盖add()方法,你可以添加其他东西。但这不是松耦合练习。也许还有Observer Framework的另一个解决方案。