嗨,我正在使用 Iterator 遍历 a hashMap
,调用后iterator.next()
是否有任何方法可以取回上一个条目(我正在寻找类似的东西iterator.previous()
)
Iterator iterator= hm.entrySet().iterator();
Map.Entry entry = (Map.Entry) iterator.next();
现在我正在创建一个虚拟迭代器来指向上一个条目。有没有其他方法可以做到这一点?
嗨,我正在使用 Iterator 遍历 a hashMap
,调用后iterator.next()
是否有任何方法可以取回上一个条目(我正在寻找类似的东西iterator.previous()
)
Iterator iterator= hm.entrySet().iterator();
Map.Entry entry = (Map.Entry) iterator.next();
现在我正在创建一个虚拟迭代器来指向上一个条目。有没有其他方法可以做到这一点?
我不知道,但是您可以将其存储在局部变量中,以便您可以在每次“下一次”迭代中访问。-
Iterator iterator = hm.entrySet().iterator();
Object prev = null;
while (iterator.hasNext()) {
Object next = iterator.next();
// Do your stuff
prev = next;
}
该ListIterator
接口为您提供了一个 iterator.previous() 方法。但当然,您只能从列表中获取列表迭代器。因此,您可以执行以下操作:
ListIterator iterator = new ArrayList(hm.entrySet()).listIterator();
不幸的是,没有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;
}
没有previous
方法。然而,您可以保留对前一个对象的引用:
Object previous = null;
while(iterator.hasNext()) {
Object current = iterator.next();
// do work with "current"
previous = current;
}
由于两个原因,无法访问前一个元素:
您可以在此处从 openjdk 阅读地图源代码:http: //www.docjar.com/html/api/java/util/HashMap.java.html
代替迭代器使用 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());
}
}
}
使用 Iterator 时没有类似 iterator.previous() 的东西。或者,您可以使用 ListIterator。
或者
您可以引用前一个元素。前任-
Object previousItem;
while(iterator.hasNext()) {
Object obj=iterator.next();
previousItem=obj;
}