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

在Java中如何在ArrayList和TreeSet之间共享元素?,java,pointers,collections,pass-by-reference,shallow-copy,Java,Pointers,Collections,Pass By Reference,Shallow Copy,我想同时修改ArrayList和TreeSet的元素 例如,当我从树集中修改一个元素时,Arraylist中相应的元素也会被修改 只要将同一个对象添加到这两个对象中,就会发生这种情况。(我遗漏了什么吗?在Java中,集合中的对象与其引用一起存储。因此,如果修改对象,它将在引用它的任何位置更新。你不应该担心那件事 为了使用这两个同步类,您应该实现一个新类,以下是模板: class MyCollection{ private TreeSet treeSet; private Arra

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


例如,当我从树集中修改一个元素时,Arraylist中相应的元素也会被修改

只要将同一个对象添加到这两个对象中,就会发生这种情况。(我遗漏了什么吗?

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

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

class MyCollection{
    private TreeSet treeSet;
    private ArrayList arrayList;

    public synchronized void add(Object o){
        treeSet.add(o);
        arrayList.add(o);
    }
}
我在上面考虑的事情:

  • 内部集合保持私有,最小特权原则
  • synchronized
    关键字以提供一致的多线程并发
以上我没有考虑的事情:

  • 泛型
  • add方法应该像所有java
    集合一样返回
    布尔值
为了获得更好的解决方案,您应该实现自己的代码,但通常情况下,这就是想法


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

这不是答案,应该是评论-1顺便说一句,你的答案基本上与我的答案完全相同…@ahmet如果是这样,最好将答案标记为“非答案”。顺便说一句,我认为这是一个答案,尽管只是一句话。我同意razlebe的观点。虽然不是非常详细,但这是一个有效的答案。我不知道这为什么会被否决。这可能表明用户不完全理解java中的引用,它可能不应该得到-1。