集合框架(一):Collection集合的遍历方式

一.迭代器遍历Collection集合

package com.njau.d2_collection_traverse;import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;/*** 目标:Collection集合的遍历方式一:使用迭代器Iterator对象遍历Collection集合*/
public class CollectionDemo01 {public static void main(String[] args) {Collection<String> c = new ArrayList<>();c.add("成龙");c.add("老爹");c.add("小玉");c.add("特鲁");// 1、Collection集合获取迭代器的方法:Iterator<E> iterator()  返回集合中的迭代器对象,该迭代器对象默认指向当前集合的第一个元素Iterator<String> it = c.iterator();// 2、Iterator迭代器中的常用方法:1、boolean hasNext()  询问当前位置是否有元素存在,有返回true,不存在返回false//                            2、E next()  获取当前位置的元素,并同时将迭代器对象指向下一个元素处
//        System.out.println(it.next());  // 成龙
//        System.out.println(it.next());  // 老爹
//        System.out.println(it.next());  // 小玉
//        System.out.println(it.next());  // 特鲁
//        System.out.println(it.next());  // 会出bug,因为已经没有元素了// 使用循环遍历while (it.hasNext()) {String ele = it.next();System.out.println(ele);}}
}

next()方法用来获取当前元素,并将迭代器对象指向下一个元素,此处代码2中连续使用next()方法,会使得迭代器对象连续后移两次,如果指向了空元素,那么就会报错。因此一定要保证使用迭代器对象时判断一次(hasnext),获取一次,后移一次。

二.增强for循环

 

package com.njau.d2_collection_traverse;import java.util.ArrayList;
import java.util.Collection;/*** 目标:掌握遍历Collection集合的方式二:使用增强for循环* for(元素的数据类型 变量名 :数组或者集合) {*     ...* }* 增强for可以用来遍历集合或者数组* 增强for遍历集合,本质就是迭代器遍历集合的简化写法*/
public class CollectionDemo02 {public static void main(String[] args) {Collection<String> c = new ArrayList<>();c.add("成龙");c.add("老爹");c.add("小玉");c.add("特鲁");for (String ele : c){System.out.println(ele);}// 还可以用来遍历数组String[] names = new String[]{"圣主","塔拉","刀龙","恶魔小龙"};for (String name : names) {System.out.println(name);}}
}

三.lambda表达式

package com.njau.d2_collection_traverse;import java.util.ArrayList;
import java.util.Collection;
import java.util.function.Consumer;/*** 目标:* 使用lambda表达式遍历Collection集合*/
public class CollectionDemo03 {public static void main(String[] args) {Collection<String> c = new ArrayList<>();c.add("成龙");c.add("老爹");c.add("小玉");c.add("特鲁");System.out.println(c);// default void forEach(Consumer<? super T> action):  结合Lambda表达式遍历集合
//        c.forEach(new Consumer<String>() {
//            @Override
//            public void accept(String s) {
//                System.out.println(s);
//            }
//        });
//
//        c.forEach((String s) -> {
//                System.out.println(s);
//        });
//
//        c.forEach(s -> {
//            System.out.println(s);
//        });
//
//        c.forEach(s -> System.out.println(s));c.forEach(System.out::println);}
}

 

结合源码我们可以发现action就是构建出来的Consumer匿名内部类对象,首先检查该action对象是否为null,如果不为null,则内部使用增强for循环,this代表主调方法,即c集合,然后使用增强for循环对该集合进行遍历。每遍历到一个数据,就会将该数据送给这个action对象,这个action就是这个匿名内部类对象,使用该对象的accept方法进行接收。继续遍历第二个对象,继续重复上述操作,直到遍历接收完所有的数据为止。

Consumer接口上方有函数式接口的注解,因此可以使用lambda表达式进行简化。

四.遍历集合元素案例

遍历集合中的电影元素

package com.njau.d2_collection_traverse;public class Movie {private String name;private double score;private String actor;public Movie(String name, double score, String actor) {this.name = name;this.score = score;this.actor = actor;}public Movie(){};public String getName() {return name;}public void setName(String name) {this.name = name;}public double getScore() {return score;}public void setScore(double score) {this.score = score;}public String getActor() {return actor;}public void setActor(String actor) {this.actor = actor;}@Overridepublic String toString() {return "Movie{" +"name='" + name + '\'' +", score=" + score +", actor='" + actor + '\'' +'}';}
}
package com.njau.d2_collection_traverse;import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.function.Consumer;/*** 目标:* 掌握Collection集合对象存储对象内容,完成电影信息的展示* new Movie("《肖申克的救赎》",9.7,”罗宾斯“)* new Movie("《霸王别姬》",9.6,”张国荣,张丰毅“)* new Movie("《阿甘正传》",9.5,”汤姆.汉克斯“)*/
public class CollectionTest04 {public static void main(String[] args) {Collection<Movie> movies = new ArrayList<>();movies.add(new Movie("《肖申克的救赎》",9.7,"罗宾斯"));movies.add(new Movie("《霸王别姬》",9.6,"张国荣,张丰毅"));movies.add(new Movie("《阿甘正传》",9.5,"汤姆.汉克斯"));System.out.println(movies);// 1、使用迭代器Iterator对Collection集合进行遍历Iterator<Movie> it = movies.iterator();while (it.hasNext()) {Movie movie = it.next();System.out.println(movie);}// 2、使用增强for循环进行遍历for (Movie movie : movies) {System.out.println(movie);}// 3、使用lambda表达式进行遍历:集合对象Collection c调用c.foreach(new Consumer<Object obj>)方法
//        movies.forEach(new Consumer<Movie>() {
//            @Override
//            public void accept(Movie movie) {
//                System.out.println(movie);
//            }
//        });
//
//        movies.forEach((Movie movie) -> {
//                System.out.println(movie);
//        });
//
//        movies.forEach(movie -> {
//            System.out.println(movie);
//        });
//
//        movies.forEach(movie -> System.out.println(movie));movies.forEach(System.out::println);}
}

原理如下:

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

嵌入式常用硬件电路设计及分析 — 通信篇

目录 一、简介 二、RS232通信 1、硬件电路设计 2、硬件电路设计分析 &#xff08;1&#xff09;常规电路 &#xff08;2&#xff09;EMC设计使用注意事项 3、DB9接头定义 三、RS485通信 1、硬件电路设计 2、硬件电路设计分析 &#xff08;1&#xff09;自动收发电路…

【C++】C++入门概念(一)

C关键字 C总计63个关键字&#xff0c;C语言32个关键字 ps&#xff1a;下面我们只是看一下C有多少关键字&#xff0c;不对关键字进行具体的讲解。后面我们学到以后再详细讨论。 命名空间 在C/C中&#xff0c;变量、函数和后面要学到的类都是大量存在的&#xff0c;这些变量、…

神州数码社招校招入职北森测评笔试:语言理解、图形推理、材料计算

神州数码入职测评使用的是北森CATA-能力倾向计算机自适应测评 国内唯一被国际计算机自适应测验协会(IACAT)收录产品&#xff0c;基于企业大量招聘下对认知能力考察的需求&#xff0c;通过最新的测评技术手段&#xff0c;快速高效,评价候选人的认知能力&#xff0c;平均作答时…

Linux环境Docker安装Mongodb

Linux环境Docker安装Mongodb 环境要求拉取指定版本镜像创建映射目录&#xff08;相当于数据存放于容器外&#xff0c;容器被删除不会影响数据&#xff09;启动容器 进入mongo命令行为指定db创建新用户查看mongodb的容器id进入命令行查看所有db切换db为指定db创建新用户使用新账…

CZ 即将回归,这四个月币安疯狂上币用意何在?

随着币安创始人赵长鹏&#xff08;CZ&#xff09;即将在2024年9月29日刑满释放&#xff0c;市场上对于他的回归以及币安未来战略方向的讨论愈演愈烈。自今年4月&#xff0c;CZ因违反美国反洗钱法被判四个月监禁后&#xff0c;币安并没有停下发展的步伐&#xff0c;反而在CZ缺席…

【python设计模式7】行为型模式2

目录 策略模式 模板方法模式 策略模式 定义一个个算法&#xff0c;把它们封装起来&#xff0c;并且使它们可以相互替换。本模式使得算法可独立于使用它的客户而变化。角色有&#xff1a;抽象策略、具体策略和上下文。 from abc import abstractmethod, ABCMeta from datetim…

2024华为杯C题详细完整思路和视频讲解

文章目录 一、背景问题描述数据描述问题问题一&#xff1a; 励磁波形分类问题二&#xff1a; 斯坦麦茨方程&#xff08;Steinmetz-equation&#xff09;修正问题三&#xff1a; 磁芯损耗因素分析问题四问题五 参考文献补充磁芯损耗分离模型磁芯损耗经验计算模型 特别注意事项问…

毕业设计选题:基于ssm+vue+uniapp的捷邻小程序

开发语言&#xff1a;Java框架&#xff1a;ssmuniappJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;M…

稀土抗菌剂:厨房用品中的安全卫士

稀土抗菌剂的抗菌机制是基于稀土的光催化半导体特性&#xff0c;通过光生氧自由基ROS机理杀灭细菌&#xff1b;稀土化合物与细菌表面静电结合&#xff0c;造成直接的杀灭&#xff1b;稀土化合物破坏细胞膜通透性&#xff0c;造成破损导致细胞质流出杀灭细菌;稀土离子跨膜后与细…

使用Lantern和LangChain构建RAG应用:一步步指南

使用Lantern和LangChain构建RAG应用&#xff1a;一步步指南 在本文中&#xff0c;我们将介绍如何使用Lantern和LangChain创建一个高效的RAG&#xff08;检索增强生成&#xff09;应用。我们将详细讲解环境设置&#xff0c;数据库配置&#xff0c;代码实现&#xff0c;以及如何…

表盘针头位置检测系统源码分享

表盘针头位置检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer…

【软设】 系统开发基础

【软设】 系统开发基础 一.软件工程概述 &#xff08;了解一下大概的流程就行&#xff09; 1. 可行性分析与项目开发计划 目的&#xff1a;评估项目的经济性、技术性和运营性&#xff0c;判断项目是否值得投资和开发。确定开发时间、预算、所需资源等。 可行性分析&#xff…

Spring Boot框架在心理教育辅导系统中的应用案例

目 录 摘 要 I ABSTRACT II 1绪 论 1 1.1研究背景 1 1.2设计原则 1 1.3论文的组织结构 2 2 相关技术简介 3 2.1Java技术 3 2.2B/S结构 3 2.3MYSQL数据库 4 2.4Springboot框架 4 3 系统分析 6 3.1可行性分析 6 3.1.1技术可行性 6 3.1.2操作可行性 6 3.1.3经济可行性 6 3.1.4法律…

Transformer模型-7- Decoder

概述 Decoder也是N6层堆叠的结构&#xff0c;每层被分3层: 两个注意力层和前馈网络层&#xff0c;同Encoder一样在主层后都加有Add&Norm&#xff0c;负责残差连接和归一化操作。 Encoder与Decoder有三大主要的不同&#xff1a; 第一层 Masked Multi-Head Attention: 采用…

XXL-JOB 漏洞大全

一、前言 在当今的数字化时代&#xff0c;任务调度平台对于企业级应用来说至关重要。它们负责自动化和协调各种时间敏感或周期性的任务&#xff0c;确保业务流程的顺畅运行。XXL-JOB作为一款流行的分布式任务调度平台&#xff0c;因其强大的功能和易用性&#xff0c;被广泛部署…

MySQL篇(存储引擎)(持续更新迭代)

目录 一、简介 二、使用存储引擎 1. 建表时指定存储引擎 2. 查询当前数据库支持的存储引擎 三、三种常见存储引擎 1. InnoDB存储引擎 1.1. 简介 1.2. 特点 1.3. 文件格式 1.4. 逻辑存储结构 表空间 段 区 页 行 2. MyISAM存储引擎 2.1. 简介 2.2. 特点 2.3. …

Unity3D入门(二) :Unity3D实现视角的丝滑过渡切换

1. 前言 上篇文章&#xff0c;我们已经初步了解了Unity3D&#xff0c;并新建并运行起来了一个项目&#xff0c;使相机视角自动围绕着立方体旋转。 这篇文章&#xff0c;我们来讲一下Unity3D怎么过渡地切换视角。 我们继续是我上篇文章中的项目&#xff0c;但是需要向把Camera…

2024最新最全:网络安全人士【必备的30个安全工具】

1.Wireshark Wireshark&#xff08;前称Ethereal&#xff09;是一个网络封包分析软件。网络封包分析软件的功能是截取网络封包&#xff0c;并尽可能显示出最为详细的网络封包资料。Wireshark使用WinPCAP作为接口&#xff0c;直接与网卡进行数据报文交换。 2.Metasploit Meta…

学习笔记——Swin Transformer(ICCV 2021 best paper)

有关ViT的学习笔记详见&#xff1a;学习笔记——ViT(Vision Transformer)-CSDN博客 ViT在图像分类方面的结果令人鼓舞&#xff0c;但由于其低分辨率的特征映射和复杂度随图像大小的二次方增长&#xff0c;其架构不适合作为密集视觉任务或高分辨率输入图像的backbone。根据经验&…

如何模拟异常情况进行接口测试自动化?

接口测试是软件测试中的重要环节&#xff0c;尤其是在分布式系统和微服务架构中&#xff0c;接口的稳定性和正确性直接影响系统的整体性能。在实际应用中&#xff0c;除了要验证接口的功能性&#xff0c;还需要测试接口在各种异常情况下的表现&#xff0c;如网络异常、超时、接…