Java Collection集合的三种遍历方式详解
作者:蓝桉cyq
Collection遍历方式
Collection集合遍历的方式有三种:
迭代器foreach/增强for循环lambda表达式
迭代器遍历
迭代器概述:
遍历就是一个一个的把容器中的元素访问一遍。
迭代器在Java中是Iterator代表的,迭代器是集合的专用遍历方式。
Collection集合获取迭代器的方:
方法名称 | 说明 |
---|---|
iterator() | 返回集合中的迭代器对象,该迭代器对象默认指向当前集合的0索引 |
// 创建迭代器对象 Iterator ite = list.iterator();
Iterator中的常用方法:
方法名称 | 说明 |
---|---|
hasNext() | 询问当前位置是否有元素存在,存在返回true ,不存在返回false |
next() | 获取当前位置的元素,并同时将迭代器对象移向下一个位置,注意防止取出越界。 |
next方法获取元素
public static void main(String[] args) { // 创建String类型的集合 Collection<String> list = new ArrayList<String>(); list.add("aaa"); list.add("bbb"); list.add("aaa"); // 创建迭代器对象 Iterator ite = list.iterator(); // 通过next取出元素 System.out.println(ite.next()); // aaa System.out.println(ite.next()); // bbb System.out.println(ite.next()); // aaa // System.out.println(ite.next()); // 注意不要越界, 越界则报错 }
hasNext方法会判断当前位置是否有元素, 我们可以使用hasNext方法作为While循环的条件, 实现自动遍历元素
public static void main(String[] args) { // 创建String类型的集合 Collection<String> list = new ArrayList<String>(); list.add("aaa"); list.add("bbb"); list.add("aaa"); // 创建迭代器对象 Iterator ite = list.iterator(); // hasNext作为条件 while (ite.hasNext()) { System.out.println(ite.next()); } }
小结:
迭代器的默认位置在哪里。
Iterator<E> iterator():得到迭代器对象,默认指向当前集合的索引0的位置
迭代器如果取元素越界会出现什么问题。
会出现NoSuchElementException异常。
foreach遍历
foreach循环也称增强for循环:
既可以遍历集合也可以遍历数组
它是JDK5之后出现的, 其内部原理是一个Iterator迭代器, 遍历集合时, 相当于是迭代器的简化写法
实现Iterable接口的类才可以使用迭代器和增强for, Collection接口已经实现了Iterable接口
for(元素数据类型 变量名 : 数组或者Collection集合) { //在此处使用定义的变量即可,该变量就是元素 }
演示代码:
public static void main(String[] args) { // 创建String类型的集合 Collection<String> list = new ArrayList<String>(); list.add("aaa"); list.add("bbb"); list.add("aaa"); // 创建int类型的数组 int[] arr = {10, 20, 80, 40}; // foreach遍历集合 for (String item : list) { System.out.println(item); } // foreach遍历数组 for (int item : arr) { System.out.println(item); // item = 100; // 注意此处修改变量item的值不会影响数组的值, 该操作无意义 } }
小结: 增强for可以遍历哪些容器?
既可以遍历集合也可以遍历数组。
Lambda遍历
Lambda表达式遍历集合:
得益于JDK 8开始的新技术Lambda表达式,提供了一种更简单、更直接的遍历集合的方式。
Collection结合Lambda遍历的API:
方法名称 | 说明 |
---|---|
forEach(Consumer<? super T> action): | 结合lambda遍历集合 |
通过foreach方法遍历集合, foreach方法要求传入一个Consumer接口类型的变量, 且该接口是一个函数式接口
演示代码:
通过foreach方法遍历
public static void main(String[] args) { // 创建String类型的集合 Collection<String> list = new ArrayList<String>(); list.add("aaa"); list.add("bbb"); list.add("aaa"); // 通过foreach方法遍历 list.forEach(new Consumer<String>() { @Override public void accept(String s) { System.out.println(s); } }); }
通过foreach方法结合Lambda表达式进行遍历
public static void main(String[] args) { // 创建String类型的集合 Collection<String> list = new ArrayList<String>(); list.add("aaa"); list.add("bbb"); list.add("aaa"); // foreach方法结合Lambda表达式 list.forEach(s -> System.out.println(s)); }
到此这篇关于Java Collection集合的三种遍历方式的文章就介绍到这了,更多相关Java Collection集合遍历内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!