迭代器有.next() - 有没有办法获取前一个元素而不是下一个元素?

ufk*_*ufk 18 java collections iterator

我有一个在HashMap上使用的迭代器,我保存并加载迭代器.有没有办法用Iterator获取HashMap中的上一个键?(java.util.Iterator的)

更新

我将它保存为Red5连接中的属性,然后将其加载以继续工作,我停下来.

另一个更新

我正在遍历HashMap的键集

小智 32

你可以用 ListIterator 而不是Iterator.ListIterator有previous()hasPrevious()方法.


Jon*_*nik 16

不像其他人指出的那样直接,但如果您需要访问前一个元素,则可以轻松地将其保存在单独的变量中.

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;
}
Run Code Online (Sandbox Code Playgroud)

  • ...虽然我无法真正思考在什么情况下,当迭代*随机排序的*HashMap键时,这将是有用的 (5认同)
  • 带评论的Downvotes会更有用. (3认同)

Oph*_*ian 14

听起来您希望数组语义更类似于ListIterator,而不是Iterator接口提供的那些.获取此类内容的最简单方法是构建一个列表(来自key-set(LinkedList<K> keyList = new LinkedList<K>(map.keySet())),然后手动使用ListIterator而不是常规Iterator或foreach.

对于需要记住连续项的非常简单的情况,处理此问题的最简单方法是将前一个Key存储在局部变量中,并在循环结束时更新它.