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


猜你喜欢
- 一、引用:1.建立一个WinForm工程,默认生成了一个WinForm窗体Form1(此处默认为主窗体)。2.引用—>添加引用—>
- 要点有另一种方法来完成语句映射。 它们映射的语句可以不用 XML 来配置,而可以使用 Java 注解来配置。使用注解来映射简单语句会使代码显
- 一、Spring Boot任务线程池线程池的作用防止资源占用无限的扩张调用过程省去资源的创建和销毁所占用的时间在高并发环境下,不断的分配新资
- 前言当同一类型的很多对象组成一个树结构的时候,可以考虑使用组合模式,组合模式涉及三个类:Component接口:定义树的各个节点的一些操作L
- Java IDE工具提供了多种用户独特需求和个人偏好来创建编程环境的方法。Java框架能够简化程序员的工作。这些框架被设计和开发用于在任何服
- 又忙了一周,事情差不多解决了,终于有可以继续写我的博客了(各位看官久等了)。这次我们来谈一谈Java里的一个很有意思的东西——回调。什么叫回
- 目录前言Binder的使用模糊进程间调用Binder原理ioctlbinder初始化总结前言Binder是安卓中实现IPC(进程间通信的)常
- 读取Java文件到byte数组的三种方法(总结)package zs;import java.io.BufferedInputStream;
- 今天介绍一个实用的小知识点,如何将List转为Map<Object, List<Object>>1. 基本写法最开始
- 本文实例讲述了C#实现将浮点数表示的货币数量以汉字大写形式输出的方法。分享给大家供大家参考。具体如下:1.函数代码注:本段代码中能转化的最大
- Java中的我们可以利用split把字符串按照指定的分割符进行分割,然后返回字符串数组split 方法该方法的作用是:将一个字符串分割为子字
- 简介ThreadPoolExecutor是一个实现ExecutorService接口的线程池,ExecutorService是主要用来处理多
- 简单介绍一下Java中的Excel文件导出功能(基于HttpServletResponse实现下载)首先,引入需要依赖的jar包:<d
- 效果图接下来就是一波贴代码的过程自定义Dialogpublic class SinaSendView extends Dialog { &n
- 一、常见的锁策略1.1 乐观锁乐观锁:乐观锁假设认为数据一般情况下不会产生并发冲突,所以在数据进行提交更新的时候,才会正 式对数据是否产生并
- 本文实例为大家分享了使用ScrollRect制作翻页的具体代码,供大家参考,具体内容如下1.标准的层级结构 ScrollRect->V
- 本文介绍了Android Studio 超级简单的打包生成apk,分享给大家,也给自己留个笔记。为什么要打包:apk文件就是一个包,打包就是
- 从远端服务器获取变更数据的主要模式有两种:推(push)和拉(pull)。Push 模式简单来说就是服务端主动将数据变更信息推送给客户端,这
- 1.背景由于公司的日志系统使用的是plumelog,最近生产环境老是报 jedis连接池不够,导致丢失日志,而且服务老是重启,怀疑跟日志系统
- 这篇文章主要介绍了Java集合使用 Iterator 删除元素,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,