我想同时修改 ArrayList 和 TreeSet 的元素。
前任。当我从 TreeSet 修改一个元素时,Arraylist 中的相应元素也会被修改。
我想同时修改 ArrayList 和 TreeSet 的元素。
前任。当我从 TreeSet 修改一个元素时,Arraylist 中的相应元素也会被修改。
只要您向两者添加相同的对象,这正是应该发生的。(我错过了什么吗?)
在 Java 中,集合中的对象与其引用一起存储。因此,如果您修改一个对象,它将在任何引用它的地方更新。你不应该担心这一点。
为了同时使用同步,您应该实现一个新类,这是模板:
class MyCollection{
private TreeSet treeSet;
private ArrayList arrayList;
public synchronized void add(Object o){
treeSet.add(o);
arrayList.add(o);
}
}
我在上面考虑的事情:
synchronized
关键字提供一致的多线程并发。上面我没有考虑过的事情:
boolean
像所有 javaCollection
一样返回。您应该实现自己的代码以获得更好的解决方案,但通常就是这样。
编辑:另一个解决方案是编写自己的 TreeSet 和 ArrayList 包装器(在下面使用 treeset 和 arraylist),当添加某些内容时,由于您将覆盖该add()
方法,因此您可以添加其他内容。但这不是松散耦合的做法。也许还有另一种使用 Observer Framework 的解决方案。