list最常用的遍历五种方式以及使用场景

目录

遍历方式的适用场景对比

迭代器遍历

列表迭代器

 增强for遍历

 Lambda表达式

lambda表达式简介

 普通for遍历

集合中通用的并且常用的六种方法


遍历方式的适用场景对比

迭代器遍历 :在遍历过程中需要删除元素,请使用迭代器

列表迭代器: 在遍历过程中需要添加元素,请使用列表迭代器

增强for遍历: 仅仅需要遍历

lambda表达式:仅仅需要遍历

普通for: 如果便利的时候想操作索引,可以使用普通for

迭代器遍历

首先定义一个list,之后添加数据到list当中,定义出一个迭代器,之后采用迭代器的next方法进行判断有没有元素,有的话就进行返回当前元素的值,之后在进行移动指针到下一位

 public static void main(String[] args) {List<Integer> list = new ArrayList<>();list.add(111);list.add(222);list.add(333);/** 定义一个迭代器* hasNext方法判断是否有该元素* next方法 将当前结果返回 并指向下一位* */Iterator<Integer> it = list.iterator();while (it.hasNext()){Integer val = it.next();System.out.println(val);}}

如果我在遍历过程中需要删除某个元素,就可以采用下面这种写法,注意要用迭代器提供的remove方法进行删除,不然代码会报异常

public class ListTest {public static void main(String[] args) {List<Integer> list = new ArrayList<>();list.add(111);list.add(222);list.add(333);/** 定义一个迭代器* hasNext方法判断是否有该元素* next方法 将当前结果返回 并指向下一位* */Iterator<Integer> it = list.iterator();while (it.hasNext()){Integer val = it.next();if (val.equals(222)){it.remove();}System.out.println(val);}System.out.println(list);}
}

可以看到输出结构如下图,已经删除了222

 需要注意的是,方法遍历时仍然会输出222,因为next方法会先将返回值也就是222传给val,之后才调用的remove方法进行删原list,之后输出的是val的值

当然如果不想要输出要删除的元素,最直接的方法就是加上continue方法

 Iterator<Integer> it = list.iterator();while (it.hasNext()){Integer val = it.next();if (val.equals(222)){it.remove();continue;}System.out.println(val);}

列表迭代器

这是list格外多出的一种遍历方式

ListIterator<Integer> it = list.listIterator();while (it.hasNext()){Integer val = it.next();System.out.println(val);}

他可以对列表进行添加元素,当然也能够删除

 ListIterator<Integer> it = list.listIterator();while (it.hasNext()){Integer val = it.next();if(val.equals(111)){it.add(444);}System.out.println(val);}

输出结果如下图所示

 增强for遍历

增强for是在jdk1.5之后出现的,其内部原理就是一个Iterator迭代器

需要注意的是  这种方式只能够遍历list,无法对里面的值就行修改

  for (Integer integer : list) {System.out.println(integer);}

可以看到我下面这种写法,能不能修改list呢?

for (Integer integer : list) {integer = 10086;System.out.println(integer);}System.out.println(list);

如果只是要看遍历的输出结果 这个是肯定会有变化的,因为我们是直接修改了integer的值,输出的结果也是它,但是intege只是作为一个第三者出现,它先等于了list原来的值,也就是说 只是让integer中list的值,并不是让它等于list

可以看到输出结果如下:

 Lambda表达式

不能够操作list,但是代码简洁,只需要一行就可以完成

 list.forEach(a -> System.out.println(a));

甚至可以缩写成

list.forEach(System.out::println);

lambda表达式简介

Lambda 表达式是 Java 8 引入的一种函数式编程特性,它允许你以一种更简洁的方式表示匿名函数或对象方法的实现。Lambda 表达式的基本语法如下:

(parameters) -> { body }

其中,Lambda 表达式由以下几个部分组成:

  1. 参数列表(parameters):这是 Lambda 表达式接受的输入参数列表。你可以指定零个或多个参数,多个参数用逗号分隔。参数的类型可以明确声明,也可以根据上下文进行推导。

  2. 箭头符号(->):箭头符号分隔参数列表和 Lambda 表达式的主体。

  3. 主体(body):这是 Lambda 表达式的执行逻辑。它可以是一个单独的表达式,或者是一段代码块(用花括号括起来),包含多个语句。

下面是一些使用 Lambda 表达式的示例:

无参数的 Lambda 表达式:

() -> System.out.println("Hello, world!");

有参数的 Lambda 表达式: 

(x, y) -> {int sum = x + y;System.out.println(sum);
}

有返回值的 Lambda 表达式: 

(x, y) -> x + y

 方法引用:

System.out::println

 普通for遍历

这是利用了list的索引就行遍历的方式,但是需要注意的是set是没有索引的,因此要想遍历set就不能用这种方式

 for (int i = 0; i < list.size(); i++) {System.out.println(list.get(i));}

集合中通用的并且常用的六种方法

1.add

list中元素是可以重复的,因此调用add方法 返回值永远是true set中则是不可以重复的,如果添加相同的元素就会返回false

2.clear

这个是将集合清空的方法

3.remove

返回值也是boolean类型的,删除成功返回true 失败返回false

4.contains

判断元素是否包含

底层是依赖equals方法进行判断是否存在的,如果存的是自定对象,这一定要重写equals(在自定义的javaBean中重写equals就行

5.isEmpty

判断集合是否为空

6.size

找到集合的长度

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/28626.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ADB初识

ADB是Android Debug Bridge&#xff0c;是一个命令行程序。abd可以从计算机上通过USB控制Android手机设备。可以使用ADB复制文件、安装和卸载应用程序&#xff0c;运行shell命令等。 ADB的下载配置 Windows版本&#xff1a;https://dl.google.com/android/repository/platform…

EMC学习笔记(十六)射频PCB的EMC设计(三)

射频PCB的EMC设计&#xff08;三&#xff09; 1.布线1.1 阻抗控制2.2 转角1.3 微带线布线1.4 微带线耦合器1.5 微带线功分器1.6 微带线基本元件1.7 带状线布线1.8 射频信号走线两边包地铜皮 2.其他设计考虑 1.布线 1.1 阻抗控制 PCB信号走线的阻抗与板材的介电常数、PCB结构、…

【Element】el-dialog 内使用 el-image 并添加 preview-src-list 预览,拖拽导致图片预览不完整问题

现象 el-dialog 内使用 el-image 并添加 preview-src-list 预览&#xff0c;拖拽导致图片预览不完整 <el-dialogwidth"500"v-model"visible":title"activeProp?.name"close"handleClose":draggable"true" // 可拖拽al…

华夏ERP在虚拟机Ubuntu上的安装(测试实例)

1.虚拟机软件VirtualBOX 7.0 2.Ubuntu 版本 3.宝塔面板安装 百度搜索宝塔面板&#xff0c;按官网提示进行安装。下面截图是官网示例。 if [ -f /usr/bin/curl ];then curl -sSO download.cnnbt.net/install_panel.sh;else wget -O install_panel.sh download.cnnbt.net/install…

【C语言】指针数组测试题(1万字长文)

江南可采莲&#xff0c;莲叶何田田。鱼戏莲叶间。鱼戏莲叶东&#xff0c;鱼戏莲叶西&#xff0c;鱼戏莲叶南&#xff0c;鱼戏莲叶北。 — 两汉汉乐府《江南》 这篇博客我们将会讲解一些习题&#xff0c;习题是有关于数组和指针的&#xff0c;数组方面的习题也能帮助我们更好的理…

基于 Junit 的接口自动化测试框架实现

目录 前言&#xff1a; 分层的自动化测试 接口测试的意义 接口测试框架选型 我们封装的接口测试框架 接口测试关键实践 测试代码规范 (仅供参考) 前言&#xff1a; 基于JUnit的接口自动化测试框架可以实现对接口进行自动化测试&#xff0c;并提供了丰富的断言和报告功能…

一文解惑mybatis中的#{}和${}

目录 基本概述 #{}的基本使用 ${}的基本使用 ${}使用情况 sql排序asc|desc 拼接表名 批量删除 模糊查询 基本概述 #{}&#xff1a;先编译sql语句&#xff0c;再给占位符传值&#xff0c;底层是PreparedStatement实现。可以防止sql注入&#xff0c;比较常用。 ${}&…

【技术指南】3D转换工具HOOPS Exchange的功能特征和典型使用场景全解析(二)

什么是 HOOPS Exchange&#xff1f;HOOPS Exchange 是一组软件库&#xff0c;可以帮助开发人员在开发应用程序时读取和写入主流的 2D 和 3D 格式。HOOPS Exchange 支持 在主流的3D 文件格式中读取 CAD 数据&#xff0c;并支持将 3D 数据转换为 PRC 数据格式&#xff0c;这是一种…

关于unity Content Size Fitter 套 Content Size Fitter

首先&#xff1a;最好不要unity Content Size Fitter 套 Content Size Fitter 这样最后得到的变化可能会错误 unity也提示了&#xff0c;父物体如果有了&#xff0c;那么子物体就不要再加了。 但是你们要的需求&#xff1a; 一级父物体 ➡自适应大小➡二级父物体&#xff08…

番外-sql server数据库表及视图未备份,误删恢复

&#xff08;1&#xff09;关闭sql server服务&#xff0c;防止数据发生更大变化&#xff1b;备份数据库的ldf文件和mdf文件&#xff08;非常重要&#xff09; &#xff08;2&#xff09;安装工具ApexSQLLog &#xff08;3&#xff09;运行工具 首先设置一下数据库连接的方式…

MediaType的常用类型-GPT问答

MediaType的常用类型-GPT问答 MediaType是一个枚举类&#xff0c;包含了常见的媒体类型。下面是一些常用的MediaType类型&#xff1a; APPLICATION_JSON&#xff1a;JSON格式的数据APPLICATION_XML&#xff1a;XML格式的数据APPLICATION_FORM_URLENCODED&#xff1a;表单格式的…

JVM笔记

1&#xff0c;什么是JVM 1.1 定义&#xff1a; Java Virtual Machine ,是java程序的运行环境(java二进制字节码的运行环境) 1.2 优势&#xff1a; 一次开发&#xff0c;到处运行自动内存谷粒&#xff0c;垃圾回收功能数组下标越界检查(防止越界覆盖其他数据结构的内存)多态…