前言
本文介绍如何使用ListIterator进行逆序遍历List。
背景
在开发的部分场景中,针对已经排序好的数据,我们期望能够进行逆序使用Iterator进行遍历,并对满足条件的数据在遍历中移除。使用for循环无法在循环中移除数据,使用Iterator无法进行逆序遍历,本文着重介绍这种场景。
实现
ListIterator实现了前序遍历的方法,主要api包括:hasPrevious()
和previous()
等,用于前序遍历。
可以通过list.listIterator(list.size())
移动到列表的最后,然后通过while循环判断是否前面还有,然后通过previous
进行取值,再进行条件判断,移除即可。代码示例如下:
public class Test {
public static void main(String[] args){
List<Integer> list = new ArrayList<>();
for (int i = 0; i < 10; ++i) {
list.add(i);
}
System.out.println(list);
ListIterator<Integer> iterator = list.listIterator(list.size());
while (iterator.hasPrevious()) {
Integer previous = iterator.previous();
if (previous % 2 == 0) {
iterator.remove();
}
}
System.out.println(list);
}
}
上述代码用于创建一个0-9的列表,所有通过逆序遍历溢出了所有的偶数,其输出结果如下:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[1, 3, 5, 7, 9]
以上,即为使用ListIterator进行倒序遍历的方法。
写在后面
欢迎各位在评论中提出问题或者针对文章中的错误提出修改意见。