您好我正在使用Iterator迭代hashMap
,在调用iterator.next()
之后是否有办法取回上一个条目(我正在寻找类似iterator.previous()
的内容)
Iterator iterator= hm.entrySet().iterator();
Map.Entry entry = (Map.Entry) iterator.next();
现在我正在创建一个虚拟迭代器来指向前一个条目。还有其他方法吗?
答案 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)
由于两个原因,无法访问上一个元素:
您可以在此处阅读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;
}