2011-12-08 6 views
2

내 응용 프로그램에는 3 개의 서로 다른 TreeSet 객체가 있으며, 모두 동일한 객체 클래스를 저장합니다.Java 컬렉션에 추가 로직 추가

그러나 어느 한 시점에서 하나의 객체가 하나의 TreeSet에만 존재할 수 있습니다.

따라서 특정 객체에 대해 contains()를 사용하여 각 TreeSet을 쿼리하면 하나의 객체에만 존재해야합니다.

TreeSet에 이러한 종류의 논리를 쉽게 추가 할 수있는 방법이 있습니까? 분명히 위의() 각 작업 후 자신을 확인하지만 더 나은 방법이 있는지 궁금해 수행 할 수 있습니다?

감사

답변

8

당신은 그들이 현재 속해있는 TreeSet의 개체를 매핑하는 맵을 유지할 수 있습니다. 오브젝트에 엔트리가없는 경우는 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); 
    } 
} 
관련 문제