мне нужно выполнить следующие операции:Java - конкретная структура данных
(1) проверить, если элементы существуют в O (1)
(2) добавить в O (1)
(3) удалить и вернуть в O (1)
Я думал о Set
в java, но поддерживает только (1) и (2). Я знаю, что можно сделать что-то вроде этого set.iterator().next()
и set.iterator().remove()
, но в чем сложность этого решения?
EDIT
Я хочу что-то вроде этого:
Set<Integer> remaining = new HashSet<>();
// add values
Queue<Integer> queue = new ArrayDeque<>();
while(!remaining.isEmpty()) {
int val = remaining.iterator().next(); // !!!
remaining.iterator().remove(); // !!!
queue.add(val);
while(!queue.isEmpty()) {
List<Integer> valuesToBeRemoved = getValues();
// some logic
for(int value : valuesToBeRemoved) {
remaining.remove(value);
}
}
}
и мне интересно, если строки, помеченные // !!! являются оптимальными
Из документации «HashSet': _» Этот класс предлагает постоянную производительность времени для основных операций (добавлять, удалять, содержать и размер) »_ Если вы хотите получить элемент; вы можете заглянуть в «HashMap». Хотя эти структуры данных не позволяют дублировать элементы/ключи, так что это может быть не то, что вы ищете. –
Я думаю, что вы не понимаете меня правильно, поэтому я постараюсь написать его более четко. Мне нужно что-то подобное в то время как (! Set.isEmpty()) {int val = set.remove()} Невозможно выполнить использование hashmap, потому что я должен указать элемент в методе get – Paew
Глядя на ваш цикл while, просто используйте итератор получает элемент и использует его метод удаления. Или просто используйте a для каждого цикла и очистите набор в конце или повторно инициализируйте его до новой пустой заданной ссылки .... –