本文最后更新于:May 21, 2022 pm
积土成山,风雨兴焉;积水成渊,蛟龙生焉;积善成德,而神明自得,圣心备焉。故不积跬步,无以至千里,不积小流无以成江海。齐骥一跃,不能十步,驽马十驾,功不在舍。面对悬崖峭壁,一百年也看不出一条裂缝来,但用斧凿,能进一寸进一寸,能进一尺进一尺,不断积累,飞跃必来,突破随之。
目录
一般对集合进行遍历的时候,用的最多的应该是 Iterator,但是Iterator是不能对集合内的元素做出添加或者删除的修改操作!!!否则会报错“并发修改异常”。但是ListIterator却可以做到对集合进行修改之类的操作。
java中的ListIterator在Iterator基础上提供了add、set、previous等对列表的操作。所以两者用法类似,Iterator的遍历和ListIterator一样,所以,此篇博文只记录ListIterator的用法,而Iterator参考使用即可。两者的区别在于获取迭代器的方式不同,如下:
| List<Integer> list = new ArrayList<>(); Iterator im = list.iterator(); ListIterator<Integer> it = list.listIterator();
|
ListIterator
ListIterator跟Iterator一样,仍是在原列表上进行操作。
遍历分为正序遍历(hasNext())和反序遍历(hasPrevious())。
方法 |
功能 |
hasNext() |
判断是否还有下一个元素可以迭代 |
next() |
返回下一个元素 |
hasPrevious() |
判断是否还有上一个元素可以迭代 |
previous() |
返回上一个元素 |
add() |
返回上一个元素 |
set(E e) |
用指定的元素替换最近返回的元素 |
remove() |
移除最近返回的元素 |
hasNext
正序遍历,从头到尾。配合next()进行移动。
遍历
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| public static void main(String[] args) throws Exception {
List<Integer> list = new ArrayList<>(); list.add(1); list.add(4); list.add(7);
ListIterator<Integer> it = list.listIterator();
while(it.hasNext()){ System.out.println(it.next()); } }
1 4 7
|
添加
可以在当前位置的前或后进行插入一个或多个数据。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
| public static void main(String[] args) throws Exception {
List<Integer> list = new ArrayList<>(); list.add(1); list.add(4); list.add(7);
ListIterator<Integer> it = list.listIterator();
while(it.hasNext()){ it.add(33); it.add(333); System.out.println(it.next()); it.add(44); it.add(444); } it = list.listIterator(); System.out.println("================"); while(it.hasNext()){ System.out.println(it.next()); }
}
1 4 7 ================ 33 333 1 44 444 33 333 4 44 444 33 333 7 44 444
|
修改
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| public static void main(String[] args) throws Exception {
List<Integer> list = new ArrayList<>(); list.add(1); list.add(4); list.add(7);
ListIterator<Integer> it = list.listIterator();
while(it.hasNext()){ it.add(33); System.out.println(it.next()); it.add(44); } it = list.listIterator(); System.out.println("================"); while(it.hasNext()){ it.next(); it.set(777); } it = list.listIterator(); System.out.println("================"); while(it.hasNext()){ System.out.println(it.next()); }
}
1 4 7 ================ ================ 777 777 777 777 777 777 777 777 777
|
删除
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
| public static void main(String[] args) throws Exception {
List<Integer> list = new ArrayList<>(); list.add(1); list.add(4); list.add(7);
ListIterator<Integer> it = list.listIterator();
while(it.hasNext()){ it.add(33); System.out.println(it.next()); it.add(44); } it = list.listIterator(); System.out.println("================"); while(it.hasNext()){ System.out.println(it.next()); } it = list.listIterator(); System.out.println("================"); while(it.hasNext()){ it.next(); it.remove(); }
it = list.listIterator(); System.out.println("================"); while(it.hasNext()){ System.out.println(it.next()); }
}
1 4 7 ================ 33 1 44 33 4 44 33 7 44 ================ ================
|
hasPrevious
反序遍历,从尾到头。所以就有一个前提条件,当前迭代器的位置必须是在最后。
遍历
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| public static void main(String[] args) throws Exception {
List<Integer> list = new ArrayList<>(); list.add(1); list.add(4); list.add(7);
ListIterator<Integer> it = list.listIterator();
while(it.hasNext()){ it.next(); } while(it.hasPrevious()){ System.out.println(it.previous()); }
}
7 4 1
|
添加
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| public static void main(String[] args) throws Exception {
List<Integer> list = new ArrayList<>(); list.add(1); list.add(4); list.add(7);
ListIterator<Integer> it = list.listIterator();
while(it.hasNext()){ it.next(); } while(it.hasPrevious()){ it.previous(); it.add(3232); it.previous(); }
System.out.println("========="); while(it.hasNext()){ System.out.println(it.next()); } }
========= 3232 1 3232 4 3232 7
|
修改
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| public static void main(String[] args) throws Exception {
List<Integer> list = new ArrayList<>(); list.add(1); list.add(4); list.add(7);
ListIterator<Integer> it = list.listIterator();
while(it.hasNext()){ it.next(); } while(it.hasPrevious()){ it.previous(); it.set(777); }
System.out.println("========="); while(it.hasNext()){ System.out.println(it.next()); } }
========= 777 777 777
|
删除
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| public static void main(String[] args) throws Exception {
List<Integer> list = new ArrayList<>(); list.add(1); list.add(4); list.add(7);
ListIterator<Integer> it = list.listIterator();
while(it.hasNext()){ it.next(); } while(it.hasPrevious()){ it.previous(); it.remove(); }
System.out.println("========="); while(it.hasNext()){ System.out.println(it.next()); } }
=========
|