ListIterator是一个功能更加强大的迭代器接口, 它继承于Iterator接口,只能用于各种List类型的访问。可以通过调用listIterator()方法产生一个指向List开始处的ListIterator, 还可以调用listIterator(n)方法创建一个一开始就指向列表索引为n的元素处的ListIterator。
我们先来看一段关于ListIterator的描述:
ListIterator接口定义如下:
Interface ListIterator<E>{}
由以上定义我们可以推出ListIterator可以:
(1)双向移动(向前/向后遍历).
(2)产生相对于迭代器在列表中指向的当前位置的前一个和后一个元素的索引.
(3)可以使用set()方法替换它访问过的最后一个元素.
(4)可以使用add()方法在next()方法返回的元素之前或previous()方法返回的元素之后插入一个元素.
扫描二维码关注公众号,回复:
10647766 查看本文章
例子:
import org.junit.Test;
import java.util.ArrayList;
import java.util.ListIterator;
public class ListIteratorTest {
private static ArrayList a;
static {
try {
a = ArrayList.class.newInstance();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
a.add("aaa");
a.add("bbb");
a.add("ccc");
}
@Test
public void listIteratorTest() {
System.out.println("Before iterate : " + a);
ListIterator<String> it = a.listIterator();
/**
* 正向遍历
*/
while (it.hasNext()) {
System.out.println(it.next() + ", " + it.previousIndex() + ", " + it.nextIndex());
}
/**
* 逆向遍历
*/
while (it.hasPrevious()) {
System.out.print(it.previous() + " ");
}
System.out.println();
/**
* 调用listIterator(n)方法创建一个一开始就指向列表索引为n的元素处的ListIterator。
* */
it = a.listIterator(1);
while (it.hasNext()) {
String t = it.next();
System.out.println(t);
if ("ccc".equals(t)) {
/**
* 替换元素
*/
it.set("nnn");
} else {
it.add("kkk");
}
}
System.out.println("After iterate : " + a);
}
}