Убедитесь, что объект находится только в одном списке

Я застрял с довольно простой вопрос.

Мне нужно убедиться, что объект находится только в одном списке. например, у меня есть два списка (псевдокод):

Object person = new Object();
List waitingForCoffe = new List();
List waitingForTee = new List();

Как я могу гарантировать, что человек находится в:

  1. Нет списка
  2. Список ожидания для кофе или
  3. Список ожидания

Но не в списках стендов одновременно. Нужно ли убедиться, что в моем коде или что-то уже существует? Шаблон дизайна?

2 ответа

Решение

Вы можете позволить "Человеку" обрабатывать назначение списка:

public class Person{

    private List currentList = null;

    public void addToList(List newList){

        if (newList == null  || newList == currentList) {
            return;
        }

        if (currentList != null){
            currentList.remove(this);
        }

        currentList = newList;
        newList.add(this);

    }

}

Вы можете использовать набор

static HashSet<String> set = new HashSet<String>();
public static void add(ArrayList<String> array, String s)
{
    if(!set.contains(s))
    {
        array.add(s);
    }
}

Set может иметь только уникальные элементы и в нем содержится () как O(1), поэтому вам не нужно беспокоиться о времени выполнения. Если вам интересно, как можно проверять, а не добавлять, вы можете просто пройтись по одному массиву и добавить все его элементы в набор. Затем вы можете перебрать второй массив и посмотреть, содержит ли Set элементы. Если это так, то значение возвращает true, тогда у вас есть повтор

Надеюсь это поможет!

Другие вопросы по тегам