2011-12-08 12 views
2

私は3つの異なるTreeSetオブジェクトをアプリケーションに持っています。これらはすべて、同じクラスのオブジェクトを格納しています。Javaコレクションに追加ロジックを追加する

しかし、任意の時点で、単一のオブジェクトがTreeSetの1つのみに存在する可能性があります。

したがって、特定のオブジェクトに対してcontains()を使用して各TreeSetを照会すると、それらのうちの1つのみに存在する必要があります。

TreeSetにこの種のロジックを簡単に追加する方法はありますか?明らかに、上記のcontains()を各操作の後で自分自身でチェックすることはできますが、より良い方法があるかどうか疑問に思っていますか?

ありがとうございました

答えて

8

オブジェクトを現在属しているツリーセットにマップするマップを保持できます。オブジェクトにエントリがない場合は、それをTreeSetに追加できます。それ以外の場合は、マップされたTreeSetから削除してから、新しいTreeSetに割り当てる必要があります。

EDIT:あなたの要求ごと

が、ここでこれを行うことかもしれない方法のためのコードスニペットがあります:

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); 
    } 
} 
関連する問題