前言:为什么不用for循环遍历Collection集合?
因为用for循环遍历集合,集合必须支持索引,而Collection并没有规定集合的索引问题。只有List系列的集合才支持索引。
一、迭代器
1.认识迭代器
迭代器概述:是用来遍历集合的专用方式(数组没有迭代器),在java中迭代器的代表是Iterator
方法名称 | 说明 |
---|---|
Iterator<E> iterator() | 返回集合中的迭代器对象 |
方法名称 | 说明 |
---|---|
boolean hasNext() | 询问当前位置是否有元素存在,存在返回true,不存在返回false |
E next() | 获取当前位置的元素,并同迭代器对象指向下一个元素处 |
2.案例讲解:
package Collection;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class CollectionTest02 {
public static void main(String[] args) {
//掌握Collection集合的三种遍历方式
Collection<String> c = new ArrayList<>();
c.add("小明");
c.add("小刘");
c.add("元桑");
c.add("小亚桑");
c.add("小小捷");
System.out.println(c);
System.out.println("------------------------------------");
//一、使用迭代器
Iterator<String> iterator = c.iterator();//获取迭代器对象
while (iterator.hasNext()) {
String str= iterator.next();
System.out.println(str);
}
}
}
二、增强for循环
1.格式
for(元素的数据类型 变量名 : 数组或者集合){
}
增强for循环可以遍历集合或数组,其本质就是迭代器遍历集合的简化写法
2.案例讲解:
同上面:
System.out.println("----------------------------------------");
//二、增强for循环
for (String ele : c) {
System.out.println(ele);
}
}
}
输出结果:
---------------------------------------
小明
小刘
元桑
小亚桑
小小捷
三、Lambda表达式遍历Collection集合
1第一步:
因为Consumer是一个接口,不可以创建对象,所以要创建匿名内部类对象
2.源码和原理
3.案例
//三、Lambda表达式遍历Collection集合
//defult void forEach(Consumer <? super T>)action :结合Lambda表达式遍历集合
//1第一步:因为Consumer是一个接口,不可以创建对象,所以要创建匿名内部类对象
c.forEach(new Consumer<String>() { //ctrl+左键-->看源码
@Override
public void accept(String t) {
}
});
//第2步:开始遍历 从上到下代码依次简化
c.forEach((String s) -> {
System.out.println(s);
});
System.out.println("-----------------------------------------");
c.forEach(s -> {
System.out.println(s);
});
System.out.println("-----------------------------------------");
c.forEach(s -> System.out.println(s));
System.out.println("-----------------------------------------");
c.forEach(System.out::println);
用 Lambda表达式遍历Collection集合 并不是十分便利(与增强for循环相比),而用Lambda表达式遍历Map集合时会很便利。
一个人静静坐在电脑面前写代码的感觉,那是什么感觉?那是武林高手闭关修炼的感觉。