Java Collection集合的三种遍历方式详解
作者:蓝桉cyq 发布时间:2023-04-29 08:11:40
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));
}
来源:https://blog.csdn.net/m0_71485750/article/details/127340201
![](https://www.aspxhome.com/images/zang.png)
![](https://www.aspxhome.com/images/jiucuo.png)
猜你喜欢
- 一. 引入相关jar包首先,我们先在idea里创建出一个Maven项目出来,除了路径要填成自己的希望路径以外,其他都可以一路next和fin
- SpringBoot starter用了springboot 那么久了居然都还没自定义过starter,想想都觉得羞愧,所以今天来玩一下。S
- Java中提供了画笔,可以使用画笔做出界面上的任何东西
- 综合案例开发:模拟双色 * 票游戏,供大家参考,具体内容如下玩法说明:双色球投注区分为红球号码区和蓝球号码区,红球号码范围为01~33,蓝球号
- ForkJoinTask就是ForkJoinPool里面的每一个任务。他主要有两个子类:RecursiveAction和RecursiveT
- 在使用IDEA写代码的时候,打开tabs都挤在一行,当打开页面过多的时候,前面的页面无法直观看到,非常不方便。通过简单设置就可以实现tabs
- 常用的Dialog有确认对话框,单选按钮对话框,多选按钮对话框,复选按钮对话框另外还有自定义的对话框AlertDialog的常用方法setT
- Spring MVC整合SpringBoot提供为整合MVC框架提供的功能特性内置两个视图解析器:ContentNegotiatingVie
- 公司的老项目要改造多租户,于是进入了大坑,本文写点遇到的坑以及解决方案,每次遇到问题在网上搜了好久,记录下来,防止以后忘掉。(一).方案网上
- 一、简述mybatis驼峰式命名规则自动转换:使用前提:数据库表设计按照规范“字段名中各单词使用下划线"_"划分”;使用
- 编写RedisConfig首先我们要明白RedisConfig中需要包含什么,首先看看我们直接使用RedisTemplate的问题,我们就知
- 项目配置依赖首先搭建一个标准的SpringBoot项目工程,相关版本以及依赖如下本项目借助SpringBoot 2.2.1.RELEASE
- Sentinel 是什么?随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 以流量为切入点,从流量控制、熔断降级、系
- 本文实例讲述了WinForm实现的图片拖拽与缩放功能。分享给大家供大家参考,具体如下:最近做项目的时候遇到上传施工平面布置图,查看,因为图片
- 1.application.yml中添加两个datasourceserver: port: 8080spring: application:
- 项目框架采用spring+hibernate+springMVC如果上传文件不想使用flash那么你可以采用HTML5;截图前段模块是boo
- 平时项目中只要涉及表,那么一定能接触到众多各式各样的ID编号,博主整理一些常用的ID格式,整合一个ID生成工具类,供大家参考,如果有什么不足
- 前文传送门:Netty分布式Future与Promise执行回调相关逻辑剖析概述FastThreadLocal我们在剖析堆外内存分配的时候简
- 这篇文章主要介绍了Springboot2.0处理自定义异常并返回json,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考
- MyBatis-Plus 使用简单,内置通用 Mapper、通用 Service,仅仅通过少量配置,即可实现单表大部分 CRUD 操作。下面