迭代器与增强型for
学习笔记文档
作者--Alianer
主要参考
迭代器
Java Iterator(迭代器)不是一个集合,它是一种用于访问集合的方法,可用于迭代 ArrayList 和 HashSet 等集合。Iterator 是 Java 迭代器最简单的实现,ListIterator 是 Collection API 中的接口, 它扩展了 Iterator 接口。
- 迭代器 it 的两个基本操作是 next 、hasNext 和 remove。
- 调用 it.next() 会返回迭代器的下一个元素,并且更新迭代器的状态。
- 调用 it.hasNext() 用于检测集合中是否还有元素。
- 调用 it.remove() 将迭代器返回的元素删除。
简单实现
正常获取迭代器然后遍历,迭代器只能使用一次
ArrayList<Integer> b = new ArrayList<>();
b.add(4);
b.add(3);
b.add(2);
b.add(1);
// 获取迭代器
Iterator<Integer> it = b.iterator();
// 迭代器返回
while (it.hasNext()){
System.out.println(it.next());
}
这样写的循环,相当于把获取迭代器放入循环,可以多次使用
// 迭代器迭代,快捷键itco
for (Iterator<Integer> iterator = b.iterator(); iterator.hasNext(); ) {
Integer next = iterator.next();
System.out.println(next);
}
对比foreach:
for (Integer integer : b) {
System.out.println(integer);
}
foreach
Java5 引入了一种主要用于数组的增强型 for 循环,也叫foreach
for(元素类型t 元素变量x : 遍历对象obj){
引用了x的java语句;
}
核心:
- Java中的foreach是一个用于迭代集合或流,且可以对迭代的每个元素进行特定操作的实用方法
- 增强for循环,内部使用的是迭代器,所以它的操作对象是数组和可以使用迭代器的集合。遍历时只能查看,无法修改、删除、增加。
简单实现
遍历数组:
//创建数组
int[] a = {1,2,4,3};
//可以使用快捷键,输入iter回车或者直接输入a.for回车
for (int i : a) {
System.out.println(i);
}
遍历多维数组:
int[][] arr = {{1,2,3},{3,2,1}};
for (int[] ints : arr) {
for (int i : ints) {
System.out.print(i + " ");
}
}
遍历集合:
// 创建ArrayList集合
ArrayList<Integer> b = new ArrayList<>();
b.add(4);
b.add(3);
b.add(2);
b.add(1);
// 遍历输出
for (Integer integer : b) {
System.out.println(integer);
}
idea的快捷键
贴出idea的有关for的快捷键,可以自己手动定义修改的
横向对比
- foreach的语法简洁,不需要关注起始和终止值
- foreach适用于循环次数未知,或者计算循环次数比较麻烦情况下使用效率更高,但是更为复杂的一些循环还是需要用到for循环效率更高。
- 以数据结构来看,for循环适合顺序表等可以随机查找的结构,而迭代器的查找方法是next()适合链表等顺序查询的结构
- 如果集合的对象是null,则增强型的for对其操作会出现异常
- 迭代器对集合遍历时候不可以对集合进行修改,使用迭代器遍历元素时,除了查看之外,只能做remove操作
- 增强for循环,内部使用的是迭代器,所以它的操作对象是数组和可以使用迭代器的集合。遍历时只能查看,无法修改、删除、增加。