上一个条目迭代器-Java
您好,我正在使用迭代器在调用上一个条目迭代器-Java,java,Java,您好,我正在使用迭代器在调用Iterator.next()之后遍历hashMap,是否有方法返回上一个条目(我正在寻找类似Iterator.previous()) 现在,我正在创建一个虚拟迭代器来指向前面的条目。还有其他方法吗?我不知道,但可以将其存储在局部变量中,以便在每次“下一次”迭代中都可以访问- Iterator iterator = hm.entrySet().iterator(); Object prev = null; while (iterator.hasNext()) {
Iterator.next()
之后遍历hashMap
,是否有方法返回上一个条目(我正在寻找类似Iterator.previous()
)
现在,我正在创建一个虚拟迭代器来指向前面的条目。还有其他方法吗?我不知道,但可以将其存储在局部变量中,以便在每次“下一次”迭代中都可以访问-
Iterator iterator = hm.entrySet().iterator();
Object prev = null;
while (iterator.hasNext()) {
Object next = iterator.next();
// Do your stuff
prev = next;
}
不幸的是,没有提供
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;
}
T previous=null;
迭代器迭代器=map.keySet().Iterator()
while(iterator.hasNext()){
T next=iterator.next();
//对下一个varable执行一些操作(希望它不是null)
上一个=下一个;
}
没有以前的方法。但您可以保留对上一个对象的引用:
Object previous = null;
while(iterator.hasNext()) {
Object current = iterator.next();
// do work with "current"
previous = current;
}
ListIterator
接口为您提供了一个迭代器.previous()方法。当然,您只能从列表中获取列表迭代器。因此,您可以执行以下操作:
ListIterator iterator = new ArrayList(hm.entrySet()).listIterator();
由于以下两个原因,无法访问上一个元素:
没有为此提供任何方法
用当前的HashMap实现实现这种方法是不可能的/效率低下的:它将每个bucket的条目存储在一个单链表中。需要一个双链表以相反的顺序进行迭代
您可以在此处阅读openjdk中的地图源代码:
使用ListIterator代替Iterator
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());
}
}
}
import java.util.ArrayList;
导入java.util.List;
导入java.util.ListIterator;
公共类MyListerator{
公共静态void main(字符串a[]{
List li=new ArrayList();
ListIterator litr=null;
加(23);
加(98);
加(29);
李.加(71);
加上(5);
litr=li.listIterator();
System.out.println(“正向元件”);
while(litr.hasNext()){
System.out.println(litr.next());
}
System.out.println(“反向元素”);
while(litr.hasPrevious()){
System.out.println(litr.previous());
}
}
}
使用迭代器时没有类似迭代器.previous()的功能。或者,您可以使用ListIterator。
或
您可以引用上一个元素。前
Object previousItem;
while(iterator.hasNext()) {
Object obj=iterator.next();
previousItem=obj;
}
将其保存在单独的变量中
Object previousItem;
while(iterator.hasNext()) {
Object obj=iterator.next();
previousItem=obj;
}