我的應用程序中有3個不同的TreeSet對象,所有這些對象都存儲相同類的對象。向Java Collection添加其他邏輯
但是,在任何一個時間點,一個對象可能只存在於TreeSet中的一箇中。因此,如果我查詢每個TreeSet使用contains()爲一個特定的對象,它應該只存在於其中的一個。
有沒有簡單的方法可以輕鬆地將這種邏輯添加到我的TreeSet中?很明顯,我可以執行上面的contains()檢查每個操作後自己,但只是想知道是否有更好的方法?
謝謝
我的應用程序中有3個不同的TreeSet對象,所有這些對象都存儲相同類的對象。向Java Collection添加其他邏輯
但是,在任何一個時間點,一個對象可能只存在於TreeSet中的一箇中。因此,如果我查詢每個TreeSet使用contains()爲一個特定的對象,它應該只存在於其中的一個。
有沒有簡單的方法可以輕鬆地將這種邏輯添加到我的TreeSet中?很明顯,我可以執行上面的contains()檢查每個操作後自己,但只是想知道是否有更好的方法?
謝謝
您可以保留一個映射,將對象映射到它們當前所屬的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);
}
也許是這樣的:
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);
}
}
不知道我跟着,你有沒有一小段代碼片段或算法供參考? – DJ180
@DavidJoyce - 看我的編輯。 –