准备工作
准备工作:我们需要创建一个数组,两个列表,一个字符串和一个set集合,如下图所示
一、普通遍历循环
- 说明:
- 1、使用普通for循环我们需要先知道对应的数组或者列表的长度
- 2、使用普通for循环,可以查询,可以修改,但是不可以删除
- 语法格式:
- 代码使用:
二、增强for
-
说明
1、增强for不需要知道遍历对象的长度
2、只能遍历数组或其他实现了Iterable接口的集合。遍历时关心数据类型。需要如果列表和集合中数据类型不一致,遍历时需要设置成Object
3、遍历字符串,不能直接使用增强for(因为没实现Iterable接口),可以将字符串转成列表后再使用增强for
4、只能查询数据,不能修改数据,是最简单且最具可读性的遍历数组方式
5、如果列表中数据类型是一个类对象,是可以对类对象的属性进行修改 -
语法格式:
-
代码使用:
三、forEach
- 说明:
1、不需要知道遍历对象的长度
2、Java 8引入的Stream API中的forEach方法,所以java版本至少是1.8
3、不关心数组和集合中的元素类型
4、使用条件:实现了Iterable接口的集合 - 语法格式:
- 代码使用
四、迭代器
- 说明:
1、是一种用于遍历集合(如列表、集合和映射等)的接口
2、只能从前往后遍历集合中的元素,不能往回遍历
3、不关心数据的类型 - 常用的方法:
- next() - 返回迭代器的下一个元素,并将迭代器的指针移到下一个位置
- hasNext() - 用于判断集合中是否还有下一个元素可以访问
- remove() - 从集合中删除迭代器最后访问的元素(可选操作)
- 代码使用
五、总结
数组 | 单一类型的列表 | 泛型的列表 | 字符串 | set集合 | |
---|---|---|---|---|---|
普通for循环 | 支持 | 支持 | 支持 | 支持 | 不支持 |
增强for | 支持 | 支持 | 支持 | 不支持 | 支持 |
forEach | 支持 | 支持 | 支持 | 不支持 | 支持 |
Iterator | 不支持 | 支持 | 支持 | 不支持 | 支持 |
普通for循环需要知道遍历的数组/列表的长度,其他不需要
增强for只支持遍历数组和数据为单一类型的列表
增强for、forEach、Iterator遍历的数据需实现Iterator接口
forEach需要的jdk版本应大于或等于1.8
forEach速度相比其他来说慢,不建议使用
六、代码奉上
import java.util.*;
public class For {
public static void main(String[] args) {
int[] arr = {1,2,3,4,5,6,7,8,9,10}; // 创建数组arr
List<Integer> list = new ArrayList<>(); // 创建列表list
// 对列表list添加类型为Integer的数据
list.add(10);list.add(20);list.add(30);list.add(40);list.add(50);
list.add(60);list.add(70);list.add(80);list.add(90);list.add(100);
List list1 = new ArrayList<>(); // 创建泛型列表list1
list1.add("abc");list1.add(123);list1.add('a');list1.add(true);list1.add(arr);// 对列表list1添加不同类型的数据:
String str = "helloWorld"; // 创建字符串str
Set set = new HashSet<>(); // 创建集合泛型集合set
set.add(1);set.add("b");set.add('c');set.add(100);set.add("java");set.add(true); // 对集合set添加数据
/** 普通for循环 **/
// 遍历数组
for(int i=0;i<arr.length;i++){
arr[i]+=100; // 可以在此处对遍历的数据进行修改
System.out.print(arr[i]+" "); // 修改后的数据打印为:101 102 103 104 105 106 107 108 109 110
}
System.out.println();
// 遍历列表(不关心列表中数据的类型)
for (int i=0;i<list.size();i++){ // list1遍历相同,只需把列表名称修改即可
list.set(i,10*i); // 可以在此处对遍历的数据进行修改
System.out.print(list.get(i)+" "); // 修改后的数据打印为:0 10 20 30 40 50 60 70 80 90
}
System.out.println();
// 遍历字符串
for(int i=0;i<str.length();i++){
if(str.charAt(i) == 'l'){ // 如果遍历的字符是'l',则将它改成'A'
str = str.replace('l','A');
}
System.out.print(str.charAt(i)+" "); // 修改后的数据打印:h e A A o W o r A d
}
// 遍历set集合 :不支持
/** 增强for **/
// 遍历数组
for(int i:arr){
System.out.print(i+" "); // 打印结果:1 2 3 4 5 6 7 8 9 10
}
System.out.println();
// 关心列表中数据的类型,所以如果不一致的时候,需要使用Objetc,否则报错
for(Object o:list1){
System.out.print(o+" "); // 打印结果:abc 123 a true [I@677327b6
}
System.out.println();
// 遍历字符串,需要将字符串转成字符数组才可以遍历
for(char c: str.toCharArray()){ // 可以将字符串转换成列表,然后用增强for遍历
System.out.print(c+" "); // 打印结果:h e l l o W o r l d
}
System.out.println();
// 遍历set集合
for(Object o:set){
System.out.print(o+" "); // 打印结果:1 b c java 100 true
}
/** forEach**/
// 遍历数组:不支持
// 遍历列表
list1.forEach(item ->{
System.out.print(item+" "); // 打印结果:abc 123 a true [I@3d075dc0
});
System.out.println();
// 遍历字符串:不支持
// 遍历set
set.forEach(item ->{
System.out.print(item+" "); // 打印结果:1 b c java 100 true
});
/** Iterator**/
// 遍历数组:需要将数组转为可以迭代的列表
Iterator iterator = Arrays.stream(arr).iterator(); // 注意:Arrays.toList(arr).iterator() 打印出来不可迭代
while(iterator.hasNext()){
System.out.print(iterator.next()+" "); // 打印结果: 1 2 3 4 5 6 7 8 9 10
}
System.out.println();
// 遍历列表
Iterator iterator1 = list1.iterator();
while(iterator1.hasNext()){
System.out.print(iterator1.next()+" "); // 打印结果:abc 123 a true [I@677327b6
}
System.out.println();
// 遍历字符串:不支持。但是可以先将字符串转为char[] 数组,然后转为列表,再迭代的间接方式
// 遍历集合
Iterator iterator2 = set.iterator();
while(iterator2.hasNext()){
System.out.print(iterator2.next()+" "); // 打印结果:1 b c java 100 true
}
}
}