Убедитесь, что объект находится только в одном списке
Я застрял с довольно простой вопрос.
Мне нужно убедиться, что объект находится только в одном списке. например, у меня есть два списка (псевдокод):
Object person = new Object();
List waitingForCoffe = new List();
List waitingForTee = new List();
Как я могу гарантировать, что человек находится в:
- Нет списка
- Список ожидания для кофе или
- Список ожидания
Но не в списках стендов одновременно. Нужно ли убедиться, что в моем коде или что-то уже существует? Шаблон дизайна?
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, тогда у вас есть повтор
Надеюсь это поможет!