我的应用程序中有3个不同的TreeSet对象,它们都存储相同的对象类。
然而,在任何一个时间点,一个对象可能只存在于一个TreeSets中。
因此,如果我使用contains()查询每个TreeSet中的特定对象,它应该只存在于其中一个。
是否有一种简单的方法可以轻松地将这种逻辑添加到TreeSet中?显然,我可以在每次操作后执行上面的contains()检查自己,但只是想知道是否有更好的方法?
谢谢
您可以保留一个映射,将对象映射到它们当前所属的TreeSet。如果一个对象没有条目,它可以被添加到TreeSet;否则,必须在将其分配给新树集之前将其从映射的树集中删除。
编辑:根据您的请求,这里有一个代码片段说明如何完成:
Map<MyObject, TreeSet<MyObject>> map = new HashMap<MyObject, TreeSet<MyObject>>();
void addToSet(MyObject obj, TreeSet<MyObject> set) {
TreeSet<MyObject> otherSet = map.get(obj);
if (otherSet != null) {
otherSet.remove(obj);
}
set.add(obj);
map.put(obj, set);
}
void removeFromSet(MyObject obj, TreeSet<MyObject> set) {
set.remove(obj);
map.remove(obj);
}
可能是这样的:
import java.util.*;
class Sets {
Sets(TreeSet<Integer> set1, TreeSet<Integer> set2, TreeSet<Integer> set3) {
this.set1 = set1;
this.set2 = set2;
this.set3 = set3;
}
boolean add(TreeSet<Integer> set, Integer i) {
if (set == set1) {
if (set2.contains(i)) {
set2.remove(i);
return set.add(i);
} else if (set3.contains(i)) {
set3.remove(i);
return set.add(i);
} else return set.add(i);
}
else if (set == set2) {
if (set1.contains(i)) {
set1.remove(i);
return set.add(i);
} else if (set3.contains(i)) {
set3.remove(i);
return set.add(i);
} else return set.add(i);
}
else if (set == set3) {
if (set1.contains(i)) {
set1.remove(i);
return set.add(i);
} else if (set2.contains(i)) {
set2.remove(i);
return set.add(i);
} else return set.add(i);
}
return false;
}
final TreeSet<Integer> set1, set2, set3;
}
public class Main {
public static void main(String[] args) {
TreeSet<Integer> set1 = new TreeSet<Integer>();
set1.add(1);
TreeSet<Integer> set2 = new TreeSet<Integer>();
set2.add(2);
TreeSet<Integer> set3 = new TreeSet<Integer>();
Sets sets = new Sets(set1, set2, set3);
System.out.println(set1);
System.out.println(set2);
System.out.println(set3);
sets.add(set3,1);
sets.add(set3,2);
sets.add(set3,3);
System.out.println(set1);
System.out.println(set2);
System.out.println(set3);
}
}