上一篇Iterator -Java

时间:2013-10-03 09:08:20

标签: java

您好我正在使用Iterator迭代hashMap,在调用iterator.next()之后是否有办法取回上一个条目(我正在寻找类似iterator.previous()的内容)

 Iterator iterator= hm.entrySet().iterator();
    Map.Entry entry = (Map.Entry) iterator.next();

现在我正在创建一个虚拟迭代器来指向前一个条目。还有其他方法吗?

7 个答案:

答案 0 :(得分:8)

我不知道,但您可以将其存储在本地变量中,以便您可以在每次'下一次'迭代中访问.-

Iterator iterator = hm.entrySet().iterator();
Object prev = null;

while (iterator.hasNext()) {
    Object next = iterator.next();
    // Do your stuff
    prev = next;
}

答案 1 :(得分:2)

不幸的是,没有提供previous()方法,但是如果你需要访问迭代中的前一个元素,你可以轻松地将它保存在一个单独的变量中。

T previous = null;
Iterator<T> iterator = map.keySet().iterator()
while (iterator.hasNext()) {
    T next = iterator.next();
    //Do something with the next varable (hopefully it's not null)
    previous = next;
}

答案 2 :(得分:2)

ListIterator接口为您提供了iterator.previous()方法。但是,当然,您只能从列表中获取列表迭代器。所以你可以做到以下几点:

ListIterator iterator = new ArrayList(hm.entrySet()).listIterator();

答案 3 :(得分:0)

没有previous方法。但是你可以保留对前一个对象的引用:

Object previous = null;
while(iterator.hasNext()) {
    Object current = iterator.next();
    // do work with "current"
    previous = current;
}

答案 4 :(得分:0)

由于两个原因,无法访问上一个元素:

  1. 没有提供任何方法
  2. 使用当前的HashMap实现实现这样的方法是不可能/低效的:它将每个桶的条目存储在单链表中。需要一个双向链表来反向迭代。
  3. 您可以在此处阅读openjdk中的地图源代码: http://www.docjar.com/html/api/java/util/HashMap.java.html

答案 5 :(得分:0)

而不是Iterator使用ListIterator

    import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;

public class MyListIterator {
    public static void main(String a[]){
        List<Integer> li = new ArrayList<Integer>();
        ListIterator<Integer> litr = null;
        li.add(23);
        li.add(98);
        li.add(29);
        li.add(71);
        li.add(5);
        litr=li.listIterator();
        System.out.println("Elements in forward directiton");
        while(litr.hasNext()){
            System.out.println(litr.next());
        }
        System.out.println("Elements in backward directiton");
        while(litr.hasPrevious()){
            System.out.println(litr.previous());
        }
    }
}

答案 6 :(得分:0)

使用Iterator时没有像iterator.previous()这样的东西。或者,你可以使用ListIterator。

你可以引用前一个元素。前 -

 Object previousItem;  
    while(iterator.hasNext()) {  
     Object obj=iterator.next();  
     previousItem=obj;  
    }