向Java Collection添加额外的逻辑



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

然而,在任何一个时间点,一个对象可能只存在于一个TreeSets中。

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

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

谢谢

您可以保留一个映射,将对象映射到它们当前所属的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);
    }
}

最新更新