У меня есть Итератор, который я использую на HashMap, и я сохраняю и загружаю итератор. существует ли способ получить предыдущий ключ в HashMap с Итератором? (java.util. Итератор)
Я сохраняю его как атрибут в соединении Red5 и затем загружаю его назад, чтобы продолжить работать, где я остановился.
Я выполняю итерации через набор ключей HashMap
Не напрямую, как указывали другие, но если вы, например, необходимо получить доступ к одному предыдущему элементу, вы можете легко сохранить его в отдельной переменной.
T previous = null;
for (Iterator<T> i = map.keySet().iterator(); i.hasNext();) {
T element = i.next();
// Do something with "element" and "previous" (if not null)
previous = element;
}
Хотя Set
не предоставляет метод для обратного итератора, Deque
предоставляет. Вы можете использовать DesndingIterator ()
для итератора в обратном порядке и iterator ()
для итератора в вперед порядке.
(Вы можете создать Deque
из Set
через Deque
, где ) set
- это ваш Set
и T
общий тип, который вы используете.)
Нет, не можете. Интерфейс Iterator не имеет способа получить предыдущий элемент.
Но что вы можете сделать, это - немного мусора - создать List
, где значение Integer
представляет собой хэш-код ключевой объект. Тогда вы можете сделать что-то вроде этого:
for (int i = 0; i < list.size(); i++)
{
YourObjectType current = list.get(i).getValue();
YourObjectType previous = (i == 0 ? null : list.get(i - 1).getValue());
// Do whatever you want
}
Я знаю, что это полная чушь, но это возможно
используя итератор, у вас нет возможности получить предыдущее значение ключа. у него есть только методы hasNext() и next().
В конечном итоге Итераторы
не полностью подходят для вашей задачи.
Почему бы не создать список
из вашего набора
(например, с помощью List list = new LinkedList (set)
) и повторить его, используя стандартный индексированный для цикла? Таким образом, вы знаете, что предыдущий элемент находится в i - 1
.
Похоже, вы хотите, чтобы семантика массива была больше похожа на ListIterator , а не на ту, что предоставляется интерфейсом Iterator. Самый простой способ получить такую вещь - это создать список (из набора ключей ( LinkedList
)), а затем использовать ListIterator вручную вместо обычного Iterator или foreach.
В очень простых случаях, когда необходимо запоминать последовательные элементы, самый простой способ справиться с этим - сохранить предыдущий ключ в локальной переменной и обновить его в конце цикла.
Нет, Iterator
определяет только 3 метода:
boolean hasNext()
E next()
void remove()
Вы, конечно, можете реализовать свой собственный итератор.
Как говорили другие, вы получаете доступ только к элементу с помощью next ()
. Однако это своего рода вопрос терминологии. Когда вы вызываете next ()
, этот становится текущим элементом.
Если проблема не в том, что вам нужно видеть два последовательных элемента в коллекции на каждой итерации, и в этом случае проще всего использовать простую переменную.