Java --- 集合(1)--- 带你了解Collection接口以及三种遍历方式

引言:本期博客摘选黑马程序员与Java从入门到精通,如果有不准确的地方还请指出,另外也感谢各位大佬点击进来观看。


目录

一.什么是集合?

二.单列集合的体系结构:

三.Collection接口的使用:

四.Collection的三种遍历方式:

 1.迭代器遍历:

2.增强for遍历:

3.Lambda表达式遍历:


一.什么是集合?

在Java中,java.util包中提供了一些集合类,而这些集合类也会被称为容器。这里提到容器,我们也会想到数组,那么数组与集合的区别是什么呢?数组的长度是固定的,而集合的长度是可变的,另外数组是被用来存储基本数据类型,而集合是可以被用来存储引用数据类型,如果想存储基本数据类型,则需给对应的基本数据类型以包装类的形式定义。

我们常用的集合分为两类:单列集合(Collection)与双列集合(Map)。本期内容将给大家介绍单列集合的相关内容。

二.单列集合的体系结构:

请看下面图片:(图片摘要黑马程序员)

上面红色框代表接口,而蓝色框则代表实现类。

三.Collection接口的使用:

 Collection接口是单列集合的祖宗接口,因为是接口嘛,所以全部单列集合都可以通过继承来使用接口内部的方法。

 下图代码给大家带来上面方法的使用,由于Collection是接口,以至于不可以被直接使用,这里就先创建他的实现类对象。

import java.util.ArrayList;
import java.util.Collection;public class Test1 {public static void main(String[] args) {Collection<String> coll = new ArrayList<>();//添加coll.add("zhangsan");coll.add("lisi");coll.add("wangwu");//打印System.out.println(coll);//[zhangsan, lisi, wangwu]//删除System.out.println(coll.remove("lisi"));//trueSystem.out.println(coll);//[zhangsan, wangwu]//判断是否包含System.out.println(coll.contains("zhangsan"));//trueSystem.out.println(coll.contains("lisi"));//false//判空System.out.println(coll.isEmpty());//false//元素个数System.out.println(coll.size());//2}
}

四.Collection的三种遍历方式:

 1.迭代器遍历:

迭代器,Iterator,也是一个接口,主要用于遍历集合中的元素。

 下面代码为遍历模板:

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;public class Test1 {public static void main(String[] args) {Collection<String> coll = new ArrayList<>();//添加coll.add("zhangsan");coll.add("lisi");coll.add("wangwu");Iterator<String> it = coll.iterator();while(it.hasNext()){String str = it.next();System.out.println(str);}}
}

那么如何理解迭代器的两种方法呢?

1.hasNext()方法是判断当前位置有没有元素,起到判断的作用。

2.next()方法会做两件事,首先获取当前元素并返回,然后将迭代器向下移动

所以利用这两种方法就可以使用迭代器获取集合内部对象。

注意!!!

  1. 迭代器使用完成不会再重新复位进行使用。
  2. 每次while循环只能使用一次next()方法,因为如果使用两次,在最后会发生迭代器越界,导致报错。
  3. 迭代器遍历不可以使用集合的方法增加或者删除,我们可以利用迭代器内部方法it.remove(),移除的是当前迭代器指向的数据。

2.增强for遍历:

为了简化迭代器树下,在JDK5后出现了该方法,其内部原理就是个迭代器,所有的单列集合以及数组才可以利用该方法进行遍历

public class Test1 {public static void main(String[] args) {Collection<String> coll = new ArrayList<>();//添加coll.add("zhangsan");coll.add("lisi");coll.add("wangwu");for(String s : coll){System.out.println(s);}}
}

我们在这里可以把 s 当成第三方变量,在循环过程依次表示集合中的每一个数据

注意,利用s是不会修改集合中原本的数据的!!!

3.Lambda表达式遍历:

在JDK8开始,Java给我们提供了更简单且直接的遍历集合的方式。

方法名称说明
default void forEach(Consumer<? super T> action):结合lambda遍历集合

 首先,我们先写一个匿名内部类的形式:

import java.util.ArrayList;
import java.util.Collection;
import java.util.function.Consumer;public class Test1 {public static void main(String[] args) {Collection<String> coll = new ArrayList<>();//添加coll.add("zhangsan");coll.add("lisi");coll.add("wangwu");coll.forEach(new Consumer<String>() {@Overridepublic void accept(String s) {System.out.println(s);}});}
}

其底层原理也是遍历集合得到每一个元素,并将其传递给accept方法,s同样也表示集合中的每一个元素。

下面看lambda表达式的正确书写格式:

import java.util.ArrayList;
import java.util.Collection;public class Test1 {public static void main(String[] args) {Collection<String> coll = new ArrayList<>();//添加coll.add("zhangsan");coll.add("lisi");coll.add("wangwu");coll.forEach (s->System.out.println(s));//lambda}
}

肯定有人会不理解这里是如何改变的???

实际上lambda表达式的语法非常特殊,其语法格式:   

()->结果表达式

参数->结果表达式

(参数1,参数2,...)->结果表达式

(类型1 参数1,类型2 参数2,...)->结果表达式

理解: 

我们可以对比上面的两组代码,当其内部仅一个参数,则()与数据类型可以省略,如果有两个数据类型相同的参数,那么可以省略数据类型 ,如果数据类型不相同,就不可以省略。如果下面的结果表达式内容仅一行代码则可以省略 ; 与 { } ,如果多行代码则不可以省略。

这里先介绍这么多,后序文章会给大家写一篇详细说明Lambda表达式。


好了今天的内容就到这里了,关注博主,下期给大家继续介绍集合的相关知识,加油!!!

记得三连支持哈。

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

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

相关文章

【Java】/*方法的递归*/

目录 一、递归的概念 二、递归执行过程分析 三、递归练习 3.1 按顺序打印一个数字的每一位&#xff0c;例如123打印出1 2 3 3.2 递归求 1 2 3 ... n 的和 3.3 输入一个非负整数&#xff0c;返回组成它的数字之和&#xff0c;例如123&#xff0c;得123 3.4 求斐波那契…

Android AOSP Ubuntu源码编译电脑卡顿问题定位解决

文章目录 问题概述分析问题解决问题查看交换分区创建交换分区删除交换分区调整交换分区的活跃度 问题概述 开发SystemUI时&#xff0c;使用内存为16G的主机&#xff0c;Ubuntu 20.04的系统编译SystemUI的源码&#xff0c;编译的过程中发现电脑卡顿&#xff0c;鼠标不能移动。必…

Docker学习笔记(一)安装Docker、镜像操作、容器操作、数据卷操作

文章目录 1 Docker介绍1.1 Docker的优势1.1.1 应用部署的环境问题1.1.2 Docker解决依赖兼容问题1.1.3 Docker解决操作系统环境差异1.1.4 小结 1.2 Docker和虚拟机的区别1.3 Docker架构1.3.1 镜像和容器1.3.2 DockerHub1.3.3 Docker架构 1.4 安装Docker1.4.1 卸载旧版本Docker&a…

【qt】纯代码界面设计

界面设计目录 一.界面设计的三种方式1.使用界面设计器2.纯代码界面设计3.混合界面设计 二.纯代码进行界面设计1.代码界面设计的总思路2.创建项目3.设计草图4.添加组件指针5.初始化组件指针6.添加组件到窗口①水平布局②垂直布局③细节点 7.定义槽函数8.初始化信号槽9.实现槽函数…

盛邦安全荣获北京市海淀区上地街道财源建设工作表彰

近日&#xff0c;盛邦安全受邀出席上地街道2024年第一季度财源建设工作联席会暨上地人工智能产业报告发布大会并收到上地街道颁发的感谢信&#xff0c;这是对公司技术创新、管理提升、营收增长&#xff0c;持续为上地地区财源建设做出突出贡献的鼓励。 盛邦安全副总裁、董事会秘…

ApiHug Official Website

&#x1f917; ApiHug {Postman|Swagger|Api...} 快↑ 准√ 省↓ GitHub - apihug/apihug.com: All abou the Apihug apihug.com: 有爱&#xff0c;有温度&#xff0c;有质量&#xff0c;有信任ApiHug - API design Copilot - IntelliJ IDEs Plugin | MarketplaceApiHug-H…

TCP的延时应答和捎带应答详解

一、延时应答 延时应答是指TCP接收方在接收到数据包后&#xff0c;并不立即发送确认&#xff08;ACK&#xff09;消息&#xff0c;而是等待一段时间&#xff0c;以期望在该时间段内收到更多的数据包&#xff0c;从而实现合并多个ACK消息为一个&#xff0c;减少网络中的确认消息…

全民拼购:被低估的商机,惊人的业绩潜力

今日&#xff0c;我要与大家探讨的是一种似乎被遗忘&#xff0c;但实则蕴含巨大商机的模式与策略。尽管它在外界看来或许并不起眼&#xff0c;但我的一位客户却凭借这一策略&#xff0c;实现了令人瞩目的业绩——日销售额逼近五千万&#xff0c;日订单量更是高达惊人的300万单。…

[C++基础编程]----预处理指令简介、typedef关键字和#define预处理指令之间的区别

目录 引言 正文 01-预处理指令简介 02-typedef关键字简介 03-#define预处理指令简介 04-#define预处理指令和typedef关键字的区别 &#xff08;1&#xff09;原理不同 &#xff08;2&#xff09;功能不同 &#xf…

TEA: Temporal Excitation and Aggregation for Action Recognition 论文阅读

TEA: Temporal Excitation and Aggregation for Action Recognition 论文阅读 Abstract1. Introduction2. Related Works3. Our Method3.1. Motion Excitation (ME) Module3.1.1 Discussion with SENet 3.2. MultipleTemporal Aggregation(MTA) Module3.3. Integration with Re…

QT如何增删安装的组件

打开 uninstall QT 往下会看到让你选择 add or remove component。 接下去就可以修改组件了

Python快速入门-零基础也能掌握的编程技巧,基础方法和API整理

目录 前言 数据结构 数字 数学运算 随机数 字符串 列表 元组 字典 面向对象 JSON 文件操作 扩展 制作一个简易时钟 前言 环境什么就不在赘述&#xff0c;可以参考其他文章&#xff0c;也可以在线运行 CSDN在线运行地址&#xff1a;InsCode - 让你的灵感立刻落地…

Amesim基础篇-热仿真常用模型库-Thermal Hydraulic /Resistance

有言在先 流体库、管路库在热管理中是必备模块&#xff0c;如动力电池液冷循环系统均需要Thermal Hydraulic /Resistance库的元件建模。 1 流体物性设置 AMEsim中内嵌了大部分液冷的热物性&#xff0c;直接在流体子模型上选择即可。常规使用的是50%乙二醇水溶液&#xff0c;如…

水表智能抄表系统是什么?

水表智能抄表系统是一种现代化水资源保护专用工具&#xff0c;它利用先进的物联网、云计算和大数据剖析&#xff0c;完成了智能抄表、实时监控系统、数据分析等作用&#xff0c;大大提高了水务管理的效率和精确性。 1.功能特点 1.1远程控制自动抄表 传统水表抄水表方法采用人…

sentinel-dashborard下发流控规则未生效排查解决

Sentinel简介 Sentinel是阿里巴巴开源的一个流量控制组件&#xff0c;它以流量为切入点&#xff0c;从流量控制、熔断降级、系统负载保护等多个维度来保护服务的稳定性。Sentinel的核心思想是&#xff1a;通过动态设置的规则&#xff0c;对进入系统的流量进行控制&#xff0c;…

C#知识|将选中的账号信息展示到控制台(小示例)

哈喽&#xff0c;你好啊&#xff0c;我是雷工&#xff01; 上篇学习了控件事件的统一关联&#xff0c; 本篇通过实例练习继续学习事件统一处理中Tag数据获取、对象的封装及泛型集合List的综合运用。 01 实现功能 在上篇的基础上实现&#xff0c;点击选中喜欢的账号&#xff0…

如何将Hyper-V转VMware?反之亦可

为何要在Hyper-V和VMware之间进行转换呢&#xff1f; 尽管VMware和Microsoft Hyper-V都是当前流行的一类虚拟机监控程序&#xff0c;但它们并不相互兼容。VMware产品使用VMDK格式创建虚拟磁盘&#xff0c;而Hyper-V则使用VHD或VHDX格式创建虚拟磁盘。 有时您可能需要进行这种转…

Edge视频增强功能

edge://flags/#edge-video-super-resolution 搜索Video查找 Microsoft Video Super Resolution 设置为Enabled

凸优化理论学习一|最优化及凸集的基本概念

文章目录 一、优化问题&#xff08;一&#xff09;数学优化&#xff08;二&#xff09;凸优化 二、凸集&#xff08;一&#xff09;一些标准凸集&#xff08;二&#xff09;保留凸性的运算&#xff08;三&#xff09;正常锥和广义不等式&#xff08;四&#xff09;分离和支撑超…

计数问题C++

题目&#xff1a; 思路&#xff1a; 1~n之间进行循环遍历&#xff0c;如果i不等于0继续循环&#xff0c;然后求出i的个位数与十位数&#xff0c;如果个位数为要查找的特定数字&#xff0c;计时器就1. 代码&#xff1a; #include<iostream> using namespace std; int n,x…