List的listIterator()方法会返回一个ListIterator迭代器对象,该迭代器的功能和Iterator迭代器基本相同,基本使用如下所示:
ListIterator<String> iterator = list.listIterator();
for(;iterator.hasNext();){
String value = iterator.next();
System.out.print(value+" ");
}
如果使用iterator()方法,我们也可以对list元素进行迭代,(iterator()是对Iterable接口iterator()方法的覆盖):
System.out.println("\nIterator的iterator()方法:");
Iterator<String> iterator2 = list.iterator();
while(iterator2.hasNext()){
String value = iterator2.next();
System.out.print(value+" ");
}
但是,ListIterator和Iterator迭代器还有区别:
a、listIterator继承自Iterator,继承结构如下所示。
public interface ListIterator<E> extends Iterator<E>
b、Iterator迭代器仅有三个方法,分别是hasNext()、next()和remove(),能够实现顺序遍历和元素的删除;我们来看一下使用迭代器删除list集合的元素:
System.out.println("\nIterator的remove方法:");
Iterator<String> iterator3 = list.iterator();
while(iterator3.hasNext()){
String value = iterator3.next();
//删除5这个元素
if("5".equals(value)){
iterator3.remove();
}
}
for(String s:list){
System.out.print(s+" ");
}
而ListIterator迭代器除了实现上面Iterator的功能外,还可以通过add()方法添加元素:
System.out.println("\nListIterator的remove方法:");
ListIterator<String> iterator4 = list.listIterator();
while(iterator4.hasNext()){
String value = iterator4.next();
if("2".equals(value)){
iterator4.remove();
}
}
//添加元素
iterator4.add("5");
iterator4.add("6");
for(String s:list){
System.out.print(s+" ");
}
c、ListIterator支持逆序遍历,可以使用hasPrevious()和previous()来实现list的逆序遍历:
System.out.println("\nListIterator的逆序遍历:");
while(iterator4.hasPrevious()){
String value = iterator4.previous();
System.out.print(value+" ");
}
d、ListIterator支持元素的修改,可以通过set方法对list现有的元素进行修改,注意,修改的是list的元素,当前的迭代器的元素的更改可能不会生效:
System.out.println("\nListIterator元素的设置:");
while(iterator4.hasNext()){
String value = iterator4.next();
iterator4.set(value+"-");
System.out.print(value+" ");
}
System.out.println();
for(String s:list){
System.out.print(s+" ");
}