当前位置: 首页 > article >正文

集合进阶(Collection)

一、集合概述和分类1.1 集合的分类如下图所示一类是单列集合元素是一个一个的另一类是双列集合元素是一对一对的。主要学习Collection单列集合。Collection是单列集合的根接口也称之为顶层接口Collection接口下面又有两个子接口List接口、Set接口List和Set下面分别有不同的实现类如下图所示上图中各种集合的特点如下图所示可以自己写代码验证一下各种集合的特点public class CollectionTest1 { public static void main(String[] args) { // 简单确认一下Collection集合的特点 CollectionString list1 new ArrayList(); //存取顺序一致可以重复有索引 list1.add(java1); list1.add(java2); list1.add(java1); list1.add(java2); System.out.println(list1); //[java1, java2, java1, java2] ​ CollectionString list2 new HashSet(); //存取顺序不一致不重复无索引 list2.add(java1); list2.add(java2); list2.add(java1); list2.add(java2); list2.add(java3); System.out.println(list2); //[java3, java2, java1] } }总结: 1. 单列集合的代表是谁双列集合的代表是谁 Collection、Map ​ 2. Collection集合有哪两大常用的集合体系各自有啥特点 List系列集合添加的元素是有序、可重复、有索引。 Set系列集合添加的元素是无序、不重复、无索引。1.2 Collection集合的常用方法接下来我们学习一下Collection集合的一些常用方法这些方法所有Collection实现类都可以使用。 这里我们以创建ArrayList为例来演示public class CollectionTest2 { public static void main(String[] args) { CollectionString c new ArrayList(); // 添加元素到集合 c.add(java1); c.add(java1); c.add(java2); c.add(java2); c.add(java3); System.out.println(c); //打印: [java1, java1, java2, java2, java3] ​ // 获取集合的大小 System.out.println(c.size()); //5 ​ // 判断集合中是否包含某个元素 System.out.println(c.contains(java1)); //true System.out.println(c.contains(Java1)); //false ​ // 删除某个元素如果有多个重复元素只能删除第一个 System.out.println(c.remove(java1)); //true System.out.println(c); //打印: [java1,java2, java2, java3] ​ // 清空集合的元素 c.clear(); System.out.println(c); //打印[] ​ // 判断集合是否为空 是空返回true 反之返回false System.out.println(c.isEmpty()); //true ​ // 把集合转换为数组 Object[] array c.toArray(); System.out.println(Arrays.toString(array)); //[java1,java2, java2, java3] ​ // 如果想把集合转换为指定类型的数组可以使用下面的代码 String[] array1 c.toArray(new String[c.size()]); System.out.println(Arrays.toString(array1)); //[java1,java2, java2, java3] ​ // 还可以把一个集合中的元素添加到另一个集合中 CollectionString c1 new ArrayList(); c1.add(java1); c1.add(java2); CollectionString c2 new ArrayList(); c2.add(java3); c2.add(java4); c1.addAll(c2); //把c2集合中的全部元素添加到c1集合中去 System.out.println(c1); //[java1, java2, java3, java4] } }最后我们总结一下Collection集合的常用功能有哪些ArrayList、LinkedList、HashSet、LinkedHashSet、TreeSet集合都可以调用下面的方法。二、Collection遍历方式2.1 迭代器遍历集合接下来学习的迭代器就是一种集合的通用遍历方式。就是用来遍历集合的专用方式(数组没有迭代器)在Java中迭代器的代表是Iterator。代码写法如下public class CollectionTest3 { public static void main(String[] args) { CollectionString c new ArrayList(); c.add(赵敏); c.add(小昭); c.add(素素); c.add(灭绝); System.out.println(c); // [赵敏, 小昭, 素素, 灭绝] ​ // 第一步先获取迭代器对象 // 解释Iterator就是迭代器对象用于遍历集合的工具 IteratorString it c.iterator(); ​ // 第二步判断当前位置是否有元素可以获取 // 解释hasNext()方法返回true说明有元素可以获取反之没有 while(it.hasNext()){ // 第三步获取当前位置的元素然后自动指向下一个元素. String e it.next(); System.out.println(e); } } }迭代器代码的原理如下当调用iterator()方法获取迭代器时当前指向第一个元素hasNext()方法则判断这个位置是否有元素如果有则返回true进入循环调用next()方法获取元素并将当前元素指向下一个位置等下次循环时则获取下一个元素依此内推最后我们再总结一下使用迭代器遍历集合用到哪些方法2.2 增强for遍历集合同学们刚才我们学习了迭代器遍历集合但是这个代码其实还有一种更加简化的写法叫做增强for循环。格式如下需要注意的是增强for不光可以遍历集合还可以遍历数组。接下来我们用代码演示一下public class CollectionTest4 { public static void main(String[] args) { CollectionString c new ArrayList(); c.add(赵敏); c.add(小昭); c.add(素素); c.add(灭绝); System.out.println(c); // [赵敏, 小昭, 素素, 灭绝] ​ // 1.使用增强for遍历集合 for(String s: c){ System.out.println(s); } ​ System.out.println(----------------------); ​ // 2.再尝试使用增强for遍历数组 String[] arr {迪丽热巴, 古力娜扎, 稀奇哈哈}; for(String name: arr){ System.out.println(name); } } }​​​2.3 forEach遍历集合在JDK8版本以后还提供了一个forEach方法也可以遍历集合如果下图所示我们发现forEach方法的参数是一个Consumer接口而Consumer是一个函数式接口所以可以传递Lambda表达式public class CollectionTest5 { public static void main(String[] args) { CollectionString c new ArrayList(); c.add(赵敏); c.add(小昭); c.add(素素); c.add(灭绝); System.out.println(c); // [赵敏, 小昭, 素素, 灭绝] ​ // 调用forEach方法 // 由于参数是一个Consumer接口所以可以传递匿名内部类 c.forEach(new ConsumerString() { Override public void accept(String s) { System.out.println(s); } }); ​ System.out.println(---------------------); ​ // 也可以使用lambda表达式对匿名内部类进行简化 c.forEach(s - System.out.println(s)); // [赵敏, 小昭, 素素, 灭绝] } }2.4 遍历集合案例接下来我们看一个案例在集合中存储自定义的对象并遍历。具体要求如下首先我们得写一个电影类用来描述每一步电影应该有哪些信息。public class Movie{ private String name; // 电影名称 private double score; // 评分 private String actor; // 演员 // 无参数构造方法 public Movie(){} // 全参数构造方法 public Movie(String name, double score, String actor){ this.namename; this.scorescore; this.actoractor; } //...get、set、toString()方法自己补上.. }接着再创建一个测试类完成上面的需求public class CollectionDemo { public static void main(String[] args) { CollectionMovie movies new ArrayList(); movies.add(new Movie(《肖申克的救赎》, 9.7, 罗宾斯)); movies.add(new Movie(《霸王别姬》, 9.6, 张国荣、张丰毅)); movies.add(new Movie(《阿甘正传》, 9.5, 汤姆汉克斯)); ​ for(Movie movie : movies){ System.out.println(电影名 movie.getName()); System.out.println(评分 movie.getScore()); System.out.println(主演 movie.getActor()); System.out.println(--------------------); } } }以上代码的内存原理如下图所示当往集合中存对象时实际上存储的是对象的地址值总结: 1、如何获取集合的迭代器对象? IteratorE iterator()获取集合对应的迭代器用来遍历集合中的元素的。 ​ 2、增强for可以遍历哪些容器 既可以遍历集合也可以遍历数组 ​ 3、增强for的关键是记住它的遍历格式它的具体格式是什么样的 for(元素的数据类型 变量名 : 数组或者集合){ // 在此处使用变量即可, 该变量就是元素 } 4、集合中存储的是元素的什么信息? 集合中存储的是元素对象的地址

相关文章:

集合进阶(Collection)

一、集合概述和分类1.1 集合的分类如下图所示:一类是单列集合元素是一个一个的,另一类是双列集合元素是一对一对的。 主要学习Collection单列集合。Collection是单列集合的根接口,也称之为顶层接口,Collection接口下面又有两个子接…...

通过AxisApi中转站使用国外API大模型教程

前言:所有的国外大模型想不通过中转站直接使用,其实是很麻烦的的事情,就拿codex来说,需要一个谷歌账号,没有谷歌账号需要注册,注册还必须要使用国外的手机号码和验证码校验审核,流程很繁琐&…...

坐北朝南教育集团

在教育行业不断发展的当下,家长和学生在选择教育机构时常常面临诸多困扰,寻找一家口碑好、教学质量高的教育集团成为了关键。坐北朝南教育集团作为辽沈地区知名的综合教育航母,在解决教育领域痛点方面表现出色,成为众多家长和学生…...

终极跨平台Steam创意工坊下载指南:WorkshopDL让你的模组之旅更简单

终极跨平台Steam创意工坊下载指南:WorkshopDL让你的模组之旅更简单 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 你是否在Epic Games Store或GOG平台购买了心仪的…...

我开会用了之后从怀疑到真香!2026华为手机语音转文字真后悔没早用

我上周差点因为漏记项目评审会的核心需求背锅,前前后后踩了N多会议记录的坑,用过不下10款语音转文字工具,掏心窝子说一句:听脑AI是同类工具中最值得职场人用的,没有之一。之前我真的不信什么语音转文字能解决所有问题&…...

在MacBook Pro上构建工业物联网数据采集:libmodbus实战指南

1. 为什么选择MacBook Pro作为工业物联网开发平台 工业物联网开发通常需要频繁的现场调试和设备对接,传统工控机笨重且不便携。MacBook Pro凭借其出色的性能表现和稳定的macOS系统,正在成为工程师们的新宠。我去年参与一个智慧农业项目时,就深…...

K8s日志太乱?试试用Docker插件把容器日志直通Grafana Loki(保姆级教程)

K8s日志太乱?试试用Docker插件把容器日志直通Grafana Loki(保姆级教程) 在容器化应用的日常运维中,日志管理往往是最容易被忽视却又最令人头疼的环节。想象一下这样的场景:你的开发环境运行着十几个Docker容器&#xf…...

VideoDownloadHelper:3步实现全网视频下载的智能工具

VideoDownloadHelper:3步实现全网视频下载的智能工具 【免费下载链接】VideoDownloadHelper Chrome Extension to Help Download Video for Some Video Sites. 项目地址: https://gitcode.com/gh_mirrors/vi/VideoDownloadHelper VideoDownloadHelper是一款专…...

原来市面上这些匹克球装备制造厂,都有啥独特之处?

匹克球运动近年来愈发火热,市面上的匹克球装备制造厂也如雨后春笋般涌现,每个品牌都有其独特的优势和特点。下面为你介绍其中一部分具有代表性的厂家及其独特之处。凯瑞麟体育用品:科技与文化的融合凯瑞麟体育用品成立于2025年11月&#xff0…...

从业者必看:医药资质认证服务核心知识梳理

如果你是初创医疗器械贸易商创始人、医美诊所创业者、连锁药店负责人或是医药电商运营人员,正面临缺证无法入驻平台、自行办理流程繁琐反复被驳回、赶大促节点急需下证等问题,想要了解医药资质认证服务相关内容,这篇科普内容会为你梳理清楚全…...

AI 绘图新进展:GPTimage2 系列(含 4K 超清版)全量上线及直连 API 体验指南

随着 AIGC(人工智能生成内容)技术的快速迭代,近期备受关注的 GPTimage2 系列模型已全量上线。作为 AI 绘图领域的新晋生力军,GPTimage2 在图像生成质量、细节刻画上展现出了极强的竞争力。特别值得一提的是,本次不仅上…...

太流批了,发票合并神器

今天给大家推荐两款软件,一款是图片转PDF,一款是发票合并工具。有需要的小伙伴可以下载收藏。 第一款:png2pdf png2pdf是一款png图片转PDF的小工具,这类的工具之前也有推荐过,但是今天这款比较特殊。 只要把图片拖入软…...

告别龟速下载!用这个离线驱动包5分钟搞定DBeaver连接所有数据库

5分钟极速配置:DBeaver全量离线驱动包实战指南 每次打开DBeaver准备连接新数据库时,那个转个不停的驱动下载进度条是不是让你抓狂?尤其是在企业内网环境或网络不稳定时,等待驱动下载的过程简直能让人把咖啡喝成凉茶。今天要分享的…...

【JSON-RPC远程过程调用组件库】测试报告

RPC 框架测试报告一、项目背景 本项目是一个基于 C 实现的轻量级 RPC(远程过程调用)框架,旨在解决分布式系统中服务间通信的复杂性。框架提供三大核心能力:基础 RPC 远程调用(同步/异步/回调三种模式)、基于…...

Python全栈实战:前后端分离开发核心要点

后端API搭建FastAPI与Flask是Python全栈开发的主流后端框架选择。两者均支持RESTful API开发,但适用场景不同:FastAPI代码示例(高性能方案):from fastapi import FastAPI app FastAPI()app.get("/items/{item_id…...

90%的程序员都不知道,转大模型根本不用从头学深度学习

文章目录前言一、大模型时代,传统深度学习的学习路径已经彻底过时了1.1 以前做AI,确实得先学深度学习1.2 现在做AI,更像是开汽车1.3 90%的大模型岗位,根本不需要深度学习底层知识二、90%的大模型开发工作,到底在做什么…...

让机房管理告别粗放,每一寸资源都物尽其用

对于机房运维人员而言,U 位管理看似是基础小事,却是决定机房运维效率、资产安全与合规水平的关键。当前,不少企业机房、单位机房仍沿用传统人工管理模式,机柜 U 位全靠记忆、台账全靠 Excel、盘点全靠熬夜,看似节省了成…...

Git 入门教程:从命令行到 IDE 集成

文章目录Git 入门教程:从命令行到 IDE 集成一、环境准备与初始配置1.1 安装 Git1.2 配置用户身份2.2 查看仓库状态2.3 添加文件到暂存区2.4 提交文件到本地仓库2.5 查看历史版本2.6 版本回退2.7 删除文件三、Git 分支操作(多人协作核心)3.1 分…...

Android 14 + Linux 6.1 平台 RTL8822CE Wi‑Fi 适配实战:从 PCI 已枚举到成功扫描热点

摘要 在 Android 14 Linux 6.1 的移植过程中,RTL8822CE Wi‑Fi 很容易出现一种“硬件已经被 PCI 枚举到,但系统就是没有 wlan0”的尴尬状态。本文复盘一次完整的 RTL8822CE 适配过程,最终定位出两个连续阻塞点:第一,目…...

在51单片机上用C语言实现扫地机器人状态机:一个双层HSM的实战案例

在51单片机上用C语言实现扫地机器人状态机:一个双层HSM的实战案例 想象一下,你的扫地机器人正在客厅里优雅地转着圈,突然撞到了茶几腿。它没有惊慌失措,而是从容地后退、转向,继续它的清洁工作。这种看似简单的行为背…...

崩坏星穹铁道自动化助手终极指南:三月七小助手完整使用教程

崩坏星穹铁道自动化助手终极指南:三月七小助手完整使用教程 【免费下载链接】March7thAssistant 崩坏:星穹铁道全自动 三月七小助手 项目地址: https://gitcode.com/gh_mirrors/ma/March7thAssistant 还在为《崩坏:星穹铁道》中繁琐的…...

告别马赛克!用MATLAB复刻复古报纸印刷的Bayer抖动算法(附完整代码)

用MATLAB重现复古报纸印刷:Bayer抖动算法的艺术与技术实践 老式报纸上的图片总带着一种独特的粗糙美感——那些由无数小黑点构成的图像,在纸张上呈现出微妙的灰度过渡。这种看似简单的印刷技术背后,隐藏着数字图像处理中一项经典算法&#xf…...

告别本地卡顿!用Pycharm 2023.3远程连接Spark集群,5步搞定开发环境

告别本地卡顿!用Pycharm 2023.3远程连接Spark集群,5步搞定开发环境 当你的笔记本风扇开始像喷气发动机一样轰鸣,而PySpark脚本才处理到第3万条数据时,就该考虑换个战场了。去年我用一台16GB内存的MacBook Pro分析800万条电商日志&…...

别再死记公式了!用“信号与系统”的视角,5分钟看懂卡尔曼滤波与互补滤波的本质区别

从频域视角解析卡尔曼滤波与互补滤波的本质差异 在机器人控制和姿态估计领域,数据融合算法始终是工程师们关注的焦点。当我们面对陀螺仪和加速度计这两种各具特色的传感器数据时,如何有效融合它们的长处,同时规避各自的短板,成为构…...

Shinkai Node:无代码AI智能体平台架构解析与实战部署

1. 项目概述:Shinkai Node,一个无需代码的AI智能体构建平台 最近在折腾AI智能体(AI Agent)的时候,发现了一个挺有意思的开源项目—— Shinkai Node 。它来自dcSpark团队,核心目标非常明确: …...

从按键开机到I2C隔离:手把手拆解一个智能硬件项目里的MOS管实战配置

从按键开机到I2C隔离:智能硬件项目中MOS管的实战配置全解析 在智能硬件开发领域,电源管理和信号隔离是决定产品可靠性的关键因素。一款典型的电池供电设备往往需要解决按键开机、低功耗关机、传感器通信隔离等多重挑战。本文将基于一个虚构但高度真实的智…...

C语言打印三角形别再只会用*了!用字母、数字、符号玩出新花样(附完整代码)

C语言打印三角形:用字母、数字和符号玩转循环艺术 在C语言入门阶段,打印三角形几乎是每个初学者必经的练习。但你是否已经厌倦了千篇一律的星号(*)图案?今天,我们将打破常规,探索如何用字母、数字和各种符号来创造独特…...

AD19原理图编译总报off grid pin警告?手把手教你从库源头搞定封装与栅格对齐

AD19原理图编译报off grid pin警告?从库源头解决封装与栅格对齐问题 每次在AD19中编译原理图时,看到那一长串的"off grid pin"警告,是不是感觉特别烦躁?这些看似无害的警告实际上可能隐藏着严重的设计隐患。作为一位经历…...

LeagueAkari英雄联盟自动化工具终极使用指南:本地化智能助手全面解析

LeagueAkari英雄联盟自动化工具终极使用指南:本地化智能助手全面解析 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power 🚀. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 你是否曾为英…...

ARM架构VDISR_EL3寄存器解析与虚拟中断处理

1. ARM架构中的VDISR_EL3寄存器深度解析在ARMv8/v9架构的异常处理子系统中,VDISR_EL3(Virtual Deferred Interrupt Status Register)是一个关键的系统寄存器,它属于ARM可靠性、可用性和可维护性(RAS)扩展的…...