2011-12-08 79 views
2

我的應用程序中有3個不同的TreeSet對象,所有這些對象都存儲相同類的對象。向Java Collection添加其他邏輯

但是,在任何一個時間點,一個對象可能只存在於TreeSet中的一箇中。因此,如果我查詢每個TreeSet使用contains()爲一個特定的對象,它應該只存在於其中的一個。

有沒有簡單的方法可以輕鬆地將這種邏輯添加到我的TreeSet中?很明顯,我可以執行上面的contains()檢查每個操作後自己,但只是想知道是否有更好的方法?

謝謝

回答

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); 
} 
+0

不知道我跟着,你有沒有一小段代碼片段或算法供參考? – DJ180

+0

@DavidJoyce - 看我的編輯。 –

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); 
    } 
}