2017-02-22 80 views
1

Я ищу структуры данных очереди типа в Java (желательно в стандартных библиотеках), который имеет следующие свойства:Структура данных Java с push/pop и без дубликатов?

  • Я могу добавить элемент к структуре (Push)
  • могу удалите произвольный элемент из структуры без указания того, какой элемент, как и операция remove() очереди. Очевидно, это не удается, если структура пуста.
  • Если я добавлю элемент в уже существующую структуру, он не будет добавлен дважды.

Сохранение порядка вставки/удаления не имеет особого значения.

Set Конструкции не имеют дубликатов, но не имеют операции pop, а конструкции Queue не гарантируют дубликатов. Есть ли что-то, удовлетворяющее мои потребности?

В интересах избежания проблемы XY, я выполняю алгоритм рабочего списка: в набор добавляются узлы, которые нуждаются в обновлении, поэтому я хочу легко добавить следующий узел, который нуждается в обновлении, и добавить узлы, которые нуждаются в обновлении не получая кучу дубликатов, если они уже находятся в рабочем списке.

+0

выглядит тот же вопрос: http://stackoverflow.com/questions/2319086/a-queue-that-ensure-uniqueness-of-the-elements – Golionko

+1

@Golionko Похожие. У этого вопроса нет требований к порядку. – shmosel

ответ

5

Использование LinkedHashSet и реализации pop в

Iterator<E> iterator = set.iterator(); 
E result = iterator.next(); 
iterator.remove(); 
+2

Возможно, вы имеете в виду 'iterator.next(); 'и' iterator.remove(); '? – dnault

+1

Хороший улов, фиксированный. –

2

Вы можете использовать итератор набор для удаления одного элемента. Заказ будет зависеть от установленной реализации.

static <T> T remove(Set<T> set) { 
    Iterator<T> iter = set.iterator(); 
    T element = iter.next(); 
    iter.remove(); 
    return element; 
}