2

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

前任。当我从 TreeSet 修改一个元素时,Arraylist 中的相应元素也会被修改。

4

2 回答 2

2

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

于 2011-07-11T17:04:28.407 回答
2

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

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

class MyCollection{
    private TreeSet treeSet;
    private ArrayList arrayList;

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

我在上面考虑的事情:

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

上面我没有考虑过的事情:

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

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

编辑:另一个解决方案是编写自己的 TreeSet 和 ArrayList 包装器(在下面使用 treeset 和 arraylist),当添加某些内容时,由于您将覆盖该add()方法,因此您可以添加其他内容。但这不是松散耦合的做法。也许还有另一种使用 Observer Framework 的解决方案。

于 2011-07-11T17:05:16.403 回答