我是靠谱客的博主 喜悦书本,这篇文章主要介绍Iterator迭代器和增强for循环Iterator迭代器增强for循环,现在分享给大家,希望可以做个参考。

Iterator迭代器

接口 Iterator

public interface Iterator<E>

Collection 进行迭代的迭代器。迭代器取代了 Java Collections Framework 中的 Enumeration。迭代器与枚举有两点不同:

  • 迭代器允许调用者利用定义良好的语义在迭代期间从迭代器所指向的 collection 移除元素。
  • 方法名称得到了改进。
方法摘要
booleanhasNext() :如果仍有元素可以迭代,则返回 true
Enext:返回迭代的下一个元素。
voidremove() :从迭代器指向的 collection 中移除迭代器返回的最后一个元素(可选操作)。

子接口ListIterator

public interface ListIterator<E>

系列表迭代器,允许程序员按任一方向遍历列表、迭代期间修改列表,并获得迭代器在列表中的当前位置。ListIterator 没有当前元素;它的光标位置始终位于调用 previous() 所返回的元素和调用 next() 所返回的元素之间。长度为 n 的列表的迭代器有 n+1 个可能的指针位置,如下面的插入符举例说明:
在这里插入图片描述

方法摘要
voidadd(E e):将指定的元素插入列表(可选操作)。
booleanhasNext():以正向遍历列表时,如果列表迭代器有多个元素,则返回 true(换句话说,如果 next 返回一个元素而不是抛出异常,则返回 true)。
booleanhasPrevious():如果以逆向遍历列表,列表迭代器有多个元素,则返回 true
Enext():返回列表中的下一个元素。
intnextIndex():返回对 next 的后续调用所返回元素的索引。
Eprevious():返回列表中的前一个元素。
intpreviousIndex():返回对 previous 的后续调用所返回元素的索引。
voidremove():从列表中移除由 nextprevious 返回的最后一个元素(可选操作)。
voidset(E e):用指定元素替换 nextprevious 返回的最后一个元素(可选操作)。

注意,remove()set(Object)方法不是根据光标位置定义的;它们是根据对调用 next()previous()所返回的最后一个元素的操作定义的。

接下来我们对这几个方法进行使用:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//迭代器遍历输出集合 public class Demo1 { public static void main(String[] args) { ArrayList<Integer> list = new ArrayList<>(); list.add(1); list.add(2); list.add(3); list.add(4); list.add(5); ListIterator<Integer> iterator = list.listIterator(); while (iterator.hasNext()){//如果集合里有元素则继续循环 System.out.println(iterator.next());//返回光标在此位置的元素 } } }

答案显然为
在这里插入图片描述

但如果我们在遍历集合之前使用了next()方法:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class Demo1 { public static void main(String[] args) { ArrayList<Integer> list = new ArrayList<>(); list.add(1); list.add(2); list.add(3); list.add(4); list.add(5); ListIterator<Integer> iterator = list.listIterator(); iterator.next(); iterator.next(); while (iterator.hasNext()){ System.out.println(iterator.next()); } } }

答案是
在这里插入图片描述

因为我们执行了两次next()方法,所以我们的光标往下移了两位,在循环里第一次next()后光标指向集合的第三个元素。

我们使用一下ListIterator中的add(E e)方法:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class Demo1 { public static void main(String[] args) { ArrayList<Integer> list = new ArrayList<>(); list.add(1); list.add(2); list.add(3); list.add(4); list.add(5); ListIterator<Integer> iterator = list.listIterator(); iterator.add(100); while (iterator.hasNext()){ System.out.println(iterator.next()); } } }

答案还是
在这里插入图片描述

为什么我们迭代器循环的时候,并没有将100这个值输出出来呢?但是其实他是在集合中的,只不过调用ListIterator中的add(E e)方法时,它将值插入到了集合的最上面,下面我们来看这个方法的具体介绍:

add(E e):将指定的元素插入列表(可选操作)。该元素直接插入到 next 返回的下一个元素的前面(如果有),或者 previous 返回的下一个元素之后(如果有);如果列表没有元素,那么新元素就成为列表中的唯一元素。新元素被插入到隐式光标前:不影响对 next 的后续调用,并且对 previous 的后续调用会返回此新元素(此调用把调用 nextIndex 或 previousIndex 所返回的值增加 1)。

它将值插入在了0的位置,0下标变为1下标…以此类推。

所以接下来我们调用一下previous()方法:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class Demo1 { public static void main(String[] args) { ArrayList<Integer> list = new ArrayList<>(); list.add(1); list.add(2); list.add(3); list.add(4); list.add(5); ListIterator<Integer> iterator = list.listIterator(); iterator.add(100); iterator.previous(); while (iterator.hasNext()){ System.out.println(iterator.next()); } } }

答案是
在这里插入图片描述

显然,我们输出了100这个值。

增强for循环

增强for循环本质是迭代器。

增强for循环(也称for each循环)是 JDK1.5 以后出来的一个高级for循环,专门用来遍历数组和集合的。它的内部原理其实是个Iterator迭代器,所以在遍历的过程中,不能对集合中的元素进行增删操作。

格式:

复制代码
1
2
3
4
for(元素的数据类型 变量名称 : Collection集合or数组){ //代码 }

遍历数组:

复制代码
1
2
3
4
5
6
7
8
9
public class Demo1 { public static void main(String[] args) { int[] arr = {1, 2, 3}; for (int i : arr) { System.out.println(i); } } }

遍历集合:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class Demo1 { public static void main(String[] args) { ArrayList<Integer> list = new ArrayList<>(); list.add(1); list.add(2); list.add(3); list.add(4); list.add(5); for (Integer i : list) { System.out.println(i); } } }

小贴士:

Iterator迭代器只能遍历Collection集合。

最后

以上就是喜悦书本最近收集整理的关于Iterator迭代器和增强for循环Iterator迭代器增强for循环的全部内容,更多相关Iterator迭代器和增强for循环Iterator迭代器增强for循环内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(74)

评论列表共有 0 条评论

立即
投稿
返回
顶部