我是靠谱客的博主 冷酷手机,这篇文章主要介绍Java基础之Iterator迭代器Iterator迭代器增强for循环最后,现在分享给大家,希望可以做个参考。

目录

  • Iterator迭代器
    • Iterator常见问题
  • 增强for循环
  • 最后

Iterator迭代器

JDK提供了一个Iterator接口,称为迭代器,可以实现单列集合元素的遍历。

Collection接口中提供了iterator()方法,可以获取迭代器对象

list.iterator() 获取迭代器对象,迭代器中有一个指针(变量),指向集合元素,初始值是-1

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public static void main(String[] args) { ArrayList<String> arrayList = new ArrayList<>(); arrayList.add("1"); arrayList.add("2"); arrayList.add("3"); //迭代器遍历 //1.获取迭代器 Iterator<String> iterator = arrayList.iterator(); //2.next每调用一次,就获取一个元素 System.out.println(iterator.next()); System.out.println(iterator.next()); //3.获取不到元素,会报错NoSuchElementException //所以没次获取元素都进行判断,判断是否可以获取 while (iterator.hasNext()){ String next = iterator.next(); System.out.println(next); } }

Iterator常见问题

NoSuchElementException

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public static void main(String[] args) { ArrayList<Integer> list = new ArrayList<>(); list.add(11); list.add(22); list.add(33); Iterator<Integer> iterator = list.iterator(); //打印奇数 while(iterator.hasNext()){ if(iterator.next()%2 == 1){ //NoSuchElementException //不能图方便这样写,相当于调用了两次 System.out.println(iterator.next()); } } }

ConcurrentModificationException并发修改异常

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public static void main(String[] args) { ArrayList<Integer> list = new ArrayList<>(); list.add(11); list.add(22); list.add(33); Iterator<Integer> iterator = list.iterator(); //删除奇数 while(iterator.hasNext()){ Integer a = iterator.next(); if(a%2==1){ //ConcurrentModificationException并发修改异常 //在迭代器中不能进行修改,在源码中会检查是否进行修改 //修改了就爆并发修改异常,所以我们要用迭代器自带的删除方法 // list.remove(a); iterator.remove(); } } }

原因:使用迭代器遍历元素时,使用集合对象增删元素,就可能有并发异常。

解决办法:使用迭代器遍历时,使用迭代器的remove方法对数据删除

增强for循环

for(元素类型 变量 : 集合或数组){

}

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

将此代码反编译得:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//反编译后的代码 public static void main(String[] args) { ArrayList<Integer> list = new ArrayList(); list.add(11); list.add(22); list.add(33); Iterator var2 = list.iterator(); while(var2.hasNext()) { Integer i = (Integer)var2.next(); System.out.println(i); } }

增强for循环实际上也就是使用了一个迭代器。

使用增强for循环是为了简化迭代器的代码

因为实际是个迭代器,所以如果用增强for去删除集合元素也会出现并发修改异常。

注意增强for循环只适合查看,不适合增删元素。

最后

如果你对本文有疑问,你可以在文章下方对我留言,敬请指正,对于每个留言我都会认真查看。

最后

以上就是冷酷手机最近收集整理的关于Java基础之Iterator迭代器Iterator迭代器增强for循环最后的全部内容,更多相关Java基础之Iterator迭代器Iterator迭代器增强for循环最后内容请搜索靠谱客的其他文章。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部