本文主要是介绍Java集合系列—Collection系列集合遍历方式(详解并附有代码案例),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
文章目录
- Collection遍历方式
- 18.2.1 迭代器遍历
- 18.2.2 增强for遍历
- 18.2.3 Lambda表达式遍历
- 18.2.4 三种通用遍历方式区别
Collection遍历方式
- Collection 是单列集合的顶层接口(祖宗接口),它的功能是全部单列集合都可以继承使用的,所以Collection 里面是一些共性的方法。
- Collection 所有方法被List 和 Set系列集合共享
18.2.1 迭代器遍历
迭代器不依赖索引
迭代器在Java中的类Iterator
,迭代器是集合专用的遍历方式。
Collection集合获取迭代器:
方法名称 | 说明 |
---|---|
Iterator iterator | 返回迭代器对象,默认指向当前集合的0索引 |
Iterator 中常用方法:
方法名称 | 说明 |
---|---|
boolean hasNext( ) | 判断当前位置是否有元素,有返回ture,没有返回fasle |
E next( ) | 获取当前位置的元素,并将迭代器对象移向下一个位置 |
注意细节:
1.报错NoSuchElementException
2.迭代器遍历完毕,指针不会复位
3.循环中只能用一次next方法
4.迭代器遍历过程中,不能用集合的方法进行增加或者删除,如果要删除可以用迭代器里的remove方法进行删除,(目前无法添加)
public class Test {public static void main(String[] args) {/*迭代器遍历相关的三个方法:Iterator<E> iterator() :获取一个迭代器对象boolean hasNext() :判断当前指向的位置是否有元素E next() :获取当前指向的元素并移动指针*/// 1.创建集合并添加元素Collection<String> coll = new ArrayList<>();coll.add("你");coll.add("好");coll.add("啊");// 2.获取迭代器对象// 迭代器就好比一个箭头,默认指向集合的0索引处Iterator<String> it = coll.iterator();// 3.循环不断的去获取集合中的每一个元素while (it.hasNext()){// 4.next()方法:获取元素并移动指针String str = it.next();System.out.println(str);//你好啊}// 当上面循环结束后,迭代器的指针已经指向最后没有元素的位置System.out.println(it.next());//报错:NoSuchElementException// 迭代器遍历完毕,指针不会复位//如果要继续第二次遍历,只能再此获取一个新的迭代器对象Iterator<String> it2= coll.iterator();while (it2.hasNext()){String str = it2.next();System.out.print(str);}}
}
public class Test02 {public static void main(String[] args) {//1.创建集合并添加元素Collection<String> coll = new ArrayList<>();coll.add("aaa");coll.add("bbb");coll.add("ccc");//2.获取迭代器对象//迭代器就好比是一个箭头,默认指向集合的0索引处Iterator<String> it = coll.iterator();//3.利用循环不断的去获取集合中的每一个元素while (it.hasNext()){//4.next方法的两件事情:获取元素,并移动指针String str = it.next();if ("bbb".equals(str)){//coll.remove("bbb");此行不可取,因为不能通过集合里的方法删除it.remove();}}System.out.println(coll);//[aaa, ccc]}
}
18.2.2 增强for遍历
- 增强for的底层就是迭代器,简化迭代器的代码书写
- JDK5之后,其内部原理就是一个Iterator迭代器
- 所有单列集合和数组才能用增强for进行遍历
格式:
for(元素的数据类型 变量名:数组或者集合){}
如:for(String s:list){sout(s);}
public static void main(String[] args) {// 创建集合并添加数据Collection<String> coll = new ArrayList<>();coll.add("aaa");coll.add("bbb");coll.add("ccc");// s其实就是一个第三方变量,在循环的过程中依次表示集合中的每一个数据for (String s : coll) {System.out.println(s);//aaa bbb ccc}for (String s : coll) {s = "ddd";}System.out.println(coll);//[aaa, bbb, ccc]
修改增强for中的变量,不会改变集合中原本的数据
18.2.3 Lambda表达式遍历
JDK8开始新的技术Lambda表达式,提供了一种更简单直接的遍历集合方式。
方法名称 | 说明 |
---|---|
deafult void forEach(Consumer<? super T> action): | 结合lambda遍历集合 |
public class Test01 {public static void main(String[] args) {// 1.创建集合并添加数据Collection<String> coll = new ArrayList<>();coll.add("aaa");coll.add("bbb");coll.add("ccc");// 2.利用匿名内部类的形式//forEach底层原理:也会自己通过普通for循环遍历集合,依次得到每一个元素//把得到的每一个元素,传递给下面的accept方法// s 表示集合中的每一个数据// coll.forEach(new Consumer<String>() {// @Override// public void accept(String s) {// System.out.println(s);// }// });// 利用匿名内部类改成 lambda表达式:coll.forEach((String s) ->{System.out.println(s);//aaa bbb ccc});// 简化lambda表达式coll.forEach(s ->System.out.println(s));//aaa bbb ccc}
}
18.2.4 三种通用遍历方式区别
迭代器:在遍历过程中需要删除元素,使用迭代器
增强for、Lambda:仅想遍历输出,就选这俩
这篇关于Java集合系列—Collection系列集合遍历方式(详解并附有代码案例)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!