Iterator接口是Java Collection Frameword的成员,是对collection进行迭代的迭代器有如下三个方法:
boolean hasnext() 如果仍有元素可以迭代,则返回 true。
E next() 返回迭代的元素
void remove() 从迭代器指向的 collection 中移除迭代器返回的最后一个元素(可选操作)。
所谓的迭代器返回的最后一个元素,即就是上一个iterator.next()返回的元素。
而Iterator子接口有ListIterator与XMLEventReader接口,ListIterator系列表迭代器,允许程序员按任一方向遍历列表、迭代期间修改列表,并获得迭代器在列表中的当前位置。ListIterator 没有当前元素;它的光标位置 始终位于调用 previous() 所返回的元素和调用 next() 所返回的元素之间。长度为 n 的列表的迭代器有 n+1 个可能的指针位置。ListIterator主要多了逆向迭代的功能与set功能
ListIterator有如下一些方法
void | add(E e) 将指定的元素插入列表(可选操作)。 |
boolean | hasNext() 以正向遍历列表时,如果列表迭代器有多个元素,则返回 true(换句话说,如果 next 返回一个元素而不是抛出异常,则返回 true)。 |
boolean | hasPrevious() 如果以逆向遍历列表,列表迭代器有多个元素,则返回 true。 |
E | next() 返回列表中的下一个元素。 |
int | nextIndex() 返回对 next 的后续调用所返回元素的索引。 |
E | previous() 返回列表中的前一个元素。 |
int | previousIndex() 返回对 previous 的后续调用所返回元素的索引。 |
void | remove() 从列表中移除由 next 或 previous 返回的最后一个元素(可选操作)。 |
void | set(E e) 用指定元素替换 next 或 previous 返回的最后一个元素(可选操作)。 |
下来我们用代码进行演示:
package test1;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
/*
* 关于Iterator、ListIterator
*/
public class Demo1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
List<String> list = new ArrayList<>();
list.add("张三");
list.add("李四");
list.add("王五");
/*
* 第一种迭代方法
*/
System.out.print("从前向后迭代依次迭代----->");
Iterator it = list.iterator();
while(it.hasNext()){
System.out.print(it.next()+" ");
}
/*
* 第二种迭代方法
* 从后往前迭代
* 注意:list.listIterator()的定位是在第一个元素
*/
System.out.println("\n-------------------------------------");
System.out.print("从后向前迭代------>");
ListIterator<String> it1 = list.listIterator(list.size());
while(it1.hasPrevious()){
System.out.print(it1.previous()+" ");
}
/*
* 第三种迭代方法
* 顺序改变
*/
System.out.println("\n---------------------------------");
System.out.print("改变迭代顺序-------->");
ListIterator<String> it2= list.listIterator(2);
while(it2.hasPrevious()){
System.out.print(it2.previous()+" ");
}
System.out.print(it2.nextIndex()+":"+it2.next()+" ");
System.out.print(it2.nextIndex()+":"+it2.next()+" ");
}
}
以下为运行结果