向Java Collection添加其他逻辑

时间:2011-12-08 04:32:30

标签: java collections

我的应用程序中有3个不同的TreeSet对象,所有这些对象都存储相同的对象类。

但是,在任何一个时间点,单个对象可能只存在于一个TreeSet中。

因此,如果我使用contains()查询特定对象的每个TreeSet,它应该只存在于其中一个。

有一种简单的方法可以轻松地将这种逻辑添加到我的TreeSet中吗?显然我可以在每次操作后执行上面的contains()检查自己,但只是想知道是否有更好的方法?

由于

2 个答案:

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