我的应用程序中有3个不同的TreeSet对象,所有这些对象都存储相同的对象类。
但是,在任何一个时间点,单个对象可能只存在于一个TreeSet中。
因此,如果我使用contains()查询特定对象的每个TreeSet,它应该只存在于其中一个。
有一种简单的方法可以轻松地将这种逻辑添加到我的TreeSet中吗?显然我可以在每次操作后执行上面的contains()检查自己,但只是想知道是否有更好的方法?
由于
答案 0 :(得分:8)
您可以保留将对象映射到它们当前所属的TreeSet的映射。如果对象没有条目,则可以将其添加到TreeSet中;否则必须先将其从映射的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);
}
答案 1 :(得分:0)
可能是这样的:
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);
}
}