在Java中如何在ArrayList和TreeSet之间共享元素?
我想同时修改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中相应的元素也会被修改 只要将同一个对象添加到这两个对象中,就会发生这种情况。(我遗漏了什么吗?在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。