ListIterator 是 Iterator 的子接口,但它比 Iterator 更加的强大,提供了更多在迭代过程中使用的方法。
ListIterator 接口常用方法:
boolean hasNext(); | 以正向遍历列表时,判断迭代器后面是否还有元素。 |
---|---|
Object next(); | 返回列表中ListIterator指向位置后面的元素。 |
boolean** hasPrevious(); | 以逆向遍历列表,判断迭代器前面是否还有元素。 |
Object** previous(); | 返回列表中ListIterator指向位置前面的元素。 |
void** remove(); | 从列表中删除next()或previous()返回的最后一个元素。 |
void** set(Object e); | 从列表中将next()或previous()返回的元素更改为指定元素。 |
void** add(Object e); | 将指定的元素插入列表,插入位置为迭代器当前位置之前。 |
ListIterator 接口获取方式:
public ListIterator listIterator();返回列表中的列表迭代器,游标位置默认为0。
public ListIterator listIterator(final int index);从列表中的指定位置开始,返回列表中的元素(游标位置为index)的列表迭代器。
【示例】 ListIterator迭代ArrayList元素
// 创建集合对象
ArrayList list = new ArrayList();
list.add("aaa");
list.add("bbb");
list.add("ccc");
// 获取容器的迭代器对象
ListIterator iter1 = list.listIterator();
// 迭代器的使用,正向遍历集合元素
while(iter1.hasNext()) {
// 获取元素
System.out.println(iter1.next());
}
// 获取容器的迭代器对象
ListIterator iter2 = list.listIterator(list.size());
// 迭代器的使用,倒序遍历集合元素
while(iter2.hasPrevious()) {
// 获取元素
System.out.println(iter2.previous());
}
Iterator只提供了删除元素的方法remove,如果我们想要在遍历的时候添加元素怎么?
通过 ListIterator 迭代器来操作元素,ListIterator接口允许程序员按照任一方向遍历列表,并且允许迭代期间操作集合中的元素。
【示例】迭代过程中对ArrayList元素操作
public class Test {
public static void main(String[] args) {
// 创建ArrayList集合
LinkedList<Integer> list = new LinkedList<Integer>();
list.add(11);
list.add(22);
list.add(33);
// 获取容器的迭代器对象
ListIterator<Integer> it = list.listIterator();
while(it.hasNext()) {
Integer value = it.next();
if(value < 20) {
it.remove(); // 删除当前迭代的这个元素
} else {
it.add(444); // 在当前元素后面添加一个元素
}
}
}
}
-
Iterator应用于Set和List集合及其子类型,但是ListIterator只能用于List及其子类型。
-
Iterator和ListIterator都有hasNext()和next()方法,可以实现顺序向后遍历,但是ListIterator有hasPrevious()和previous()方法,可以实现逆向(顺序向前)遍历。
-
Iterator和ListIterator都有remove()方法,但是ListIterator还有add()方法和set()方法。
ps:如需最新的免费文档资料和教学视频,请添加QQ群(627407545)领取。