Добавление дополнительной логики в Java Collection - PullRequest
2 голосов
/ 08 декабря 2011

В моем приложении 3 разных объекта TreeSet, каждый из которых хранит один и тот же класс объекта.

Однако в любой момент времени один объект может существовать только в одном из TreeSets.

Таким образом, если бы я запрашивал каждый TreeSet с помощью функции contains () для определенного объекта, он должен существовать только в одном из них.

Есть ли простой способ легко добавить такую ​​логику в мой TreeSet? Очевидно, что я могу выполнить описанную выше проверку на наличие () самостоятельно после каждой операции, но мне просто интересно, есть ли лучшие способы?

Спасибо

Ответы [ 2 ]

8 голосов
/ 08 декабря 2011

Вы можете сохранить карту, которая отображает объекты в 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 голосов
/ 08 декабря 2011

может быть что-то вроде:

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);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...