JAVA学习日记(十四)集合进阶
一、单列集合Collection


List系列集合特点:添加的元素是有序(存和取的顺序一致)、可重复、有索引
Set系列集合特点:添加的元素是无序(存和取的顺序有可能不一致)、不重复、无索引
Collection是所有单列集合的祖宗接口,其功能所有的单列集合都能继承使用。

import java.util.ArrayList;
import java.util.Collection;public class Main {public static void main(String[] args){//利用多态创建对象//对于成员变量:在子类的对象中,会把父类的成员变量继承下去。多态创建的对象是采用父类变量。//对于成员方法:如果子类对方法进行了重写,那么在继承时,虚方法表中会覆盖父类的方法,因此多态创建的对象采用子类方法。Collection<String> collection=new ArrayList<>();//1、添加元素//对于同为Collection子类的 List系列集合 和 Set系列集合 两者都继承了父类种的 add 方法//如果是通过List系列集合的对象调用 add 方法,则方法永远返回true(添加成功),因为List系列集合允许元素重复//如果是通过Set系列集合的对象调用 add 方法,则方法会在元素不重复的情况下返回true(添加成功),否则返回false,因为Set系列集合不允许元素重复collection.add("abc");collection.add("def");collection.add("ghi");System.out.println(collection); //[abc, def, ghi]//2、清空// collection.clear();// System.out.println(collection); //[]//3、删除//因为Set系列集合具有 无序 的特点,因此在父类中定义的remove方法是共性的方法——既无法通过索引删除,只能通过元素的对象删除。//方法返回的是boolean类型的值,删除成功(要删除的元素存在)则返回true,反之返回false。System.out.println(collection.remove("abc")); //trueSystem.out.println(collection); //[def, ghi]//4、判断元素是否包含//contains方法底层是依赖equals方法进行判断是否存在的//如果集合中存储的是自定义对象,也想通过contains方法判断是否包含,在Javabean中一定要重写Equals方法//因为对于引用数据类型,equals方法比较的是元素的地址值boolean result1=collection.contains("def");boolean result2=collection.contains("defg");System.out.println(result1); //trueSystem.out.println(result2); //false//5、判断集合是否为空boolean result3=collection.isEmpty();System.out.println(result3); //false//6、判断集合长度System.out.println(collection.size()); //2collection.add("abc");System.out.println(collection.size()); //3}}
二、Collection遍历方式
(一)迭代器遍历
特点:不依赖索引
迭代器在Java中的类是Iterator,迭代器是集合专用的遍历方式。

注意点:
①代器遍历结束后,指针不会复位,若需要再次遍历,只能再创建一个新的迭代器对象
②循环中只能用一次next方法(可以用一个变量进行记录)
③迭代器遍历时,不能用集合的方法进行增加或者删除(若要进行删除操作,需要用迭代器对象调用remove方法,增加目前没有办法)
④如果当前位置没有元素,还要强行获取,会报错,报错类型位:NoSuchElementException
import java.util.ArrayList;
import java.util.Iterator;public class Main {public static void main(String[] args){ArrayList<String> list=new ArrayList<>();list.add("三");list.add("连");list.add("外");list.add("加");list.add("转");list.add("发");list.add("了");list.add("吗");list.add("?");list.add("?");Iterator<String> it=list.iterator(); //返回迭代器对象,默认指向集合的0索引boolean flag=it.hasNext();System.out.println(flag);String str=it.next();//获取当前元素,并将迭代器对象移向下一个位置System.out.println(str);// 三str=it.next();System.out.println(str);// 连}
}
import java.util.ArrayList;
import java.util.Iterator;public class Main {public static void main(String[] args){ArrayList<String> list=new ArrayList<>();list.add("三");list.add("连");list.add("外");list.add("加");list.add("转");list.add("发");list.add("了");list.add("吗");list.add("?");list.add("?");Iterator<String> it=list.iterator(); //返回迭代器对象,默认指向集合的0索引boolean flag=it.hasNext();System.out.println(flag);//使用迭代器进行遍历while(it.hasNext()){String str=it.next();System.out.print(str+" ");//三 连 外 加 转 发 了 吗 ? ? }}
}
(二)增强for遍历
①增强for的底层就是迭代器,为了简化迭代器的代码书写的。
②是JDK5之后出现的,内部原理就是一个Iterator迭代器。
③所有的单列集合和数组才能用增强for进行遍历。
格式:

例:
import java.util.ArrayList;
import java.util.Collection;public class Main {public static void main(String[] args){//集合的三种遍历方式:迭代器遍历 增强for循环遍历 lambda表达式遍历Collection<String> list=new ArrayList<>();list.add("三");list.add("连");list.add("外");list.add("加");list.add("转");list.add("发");list.add("了");list.add("吗");list.add("?");list.add("?");//增强for循环遍历//快速生成方式: list.for (集合名字.for)for(String s:list){System.out.print(s+" ");}}
}
注意点:
修改增强for中的变量,不会改变集合中原本的数据(遍历过程中是用第三方变量记录集合中的元素,修改增强for中的变量不影响集合元素)
(三)Lambda表达式遍历
例:
import java.util.ArrayList;
import java.util.Collection;
import java.util.function.Consumer;public class Main {public static void main(String[] args){//集合的三种遍历方式:迭代器遍历 增强for循环遍历 lambda表达式遍历Collection<String> list=new ArrayList<>();list.add("三");list.add("连");list.add("外");list.add("加");list.add("转");list.add("发");list.add("了");list.add("吗");list.add("?");list.add("?");//增强for循环遍历for(String s:list){System.out.print(s+" ");}System.out.println();System.out.println("________________________");//使用匿名内部类的形式遍历list.forEach(new Consumer<String>() {@Override//s依次表示集合中的每一个数据//方法底层也是遍历集合,依次得到每一个元素,把得到的每一个元素,传递给下面的accept方法//s依次表示集合中的每一个数据public void accept(String s) {System.out.print(s+" ");}});System.out.println();System.out.println("___________________________");//使用Lambda表达式简化匿名内部类方法list.forEach(s-> System.out.print(s+" "));}
}
(四)总结

三、List系列集合
特点:有序、有索引、可重复
List集合方法:
①Collection的方法都继承了
②List集合有索引,有很多关于索引操作的方法:

关于remove方法的问题:
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.function.Consumer;public class Main {public static void main(String[] args){//List系列集合List<Integer> list1=new ArrayList<>();list1.add(1);list1.add(2);list1.add(3);//若想要删除元素1//list1.remove(1); 会判断1为集合的索引而不是元素//正确方法list1.remove((Integer) 1);System.out.println(list1); //[2, 3]}
}
原因:remove方法在调用时,发生了重载现象,默认优先调用实参和形参类型一致的方法。
方法示例代码:
import java.util.ArrayList;
import java.util.List;public class Main {public static void main(String[] args){//List系列集合//因为List类是一个接口类,所以不能直接创建接口类的对象//在这边只能创建一个List的实现类的对象List<String> list=new ArrayList<>();list.add("aaa");list.add("bbb");list.add("ccc");list.add("ddd");System.out.println(list); //[aaa, bbb, ccc, ddd]// add(int index,E element) 在指定索引出插入指定的元素list.add(0,"fff");System.out.println(list); //[fff, aaa, bbb, ccc, ddd]System.out.println("__________________");//E remove(int index) 删除指定索引处的元素,返回被删除的元素String remove=list.remove(2);System.out.println(remove); //bbbSystem.out.println(list); //[fff, aaa, ccc, ddd]// E set(int index,E element) 修改指定索引处的元素,将被修改处的原元素返回System.out.println("_____________________");String set=list.set(0,"hahaha");System.out.println(set); //fffSystem.out.println(list); //[hahaha, aaa, ccc, ddd]System.out.println("_________________");//E get(int index) 返回指定索引处的元素String get=list.get(0);System.out.println(get); //hahaha}
}
List集合遍历方式:

示例代码:
import java.util.*;public class Main {public static void main(String[] args){//List系列集合遍历方法List<String> list=new ArrayList<>();list.add("aaa");list.add("bbb");list.add("ccc");list.add("ddd");System.out.println(list); //[aaa, bbb, ccc, ddd]System.out.println("__________________________");//1、迭代器遍历//创建迭代器对象Iterator<String> it=list.iterator();System.out.print("迭代器遍历: ");while(it.hasNext()){String str=it.next();System.out.print(str+" ");}System.out.println();System.out.println("________________");//2、增强for遍历System.out.print("增强for遍历:");for (String s : list) {System.out.print(s+" ");}System.out.println();System.out.println("______________________");//3、Lambda表达式遍历System.out.print("Lambda表达式遍历:");list.forEach(s-> System.out.print(s+" "));System.out.println();System.out.println("___________________");//4、普通for循环遍历System.out.print("普通for循环遍历:");for(int i=0;i<list.size();i++){System.out.print(list.get(i)+" ");}System.out.println();System.out.println("_________________________");//5、列表迭代器遍历//创建列表迭代器对象//比迭代器多了一个功能: 能够在遍历的同时添加元素(之前只能用迭代器的remove方法删除元素)ListIterator<String> lit=list.listIterator();System.out.print("列表迭代器遍历: ");while(lit.hasNext()){String str=lit.next();if("ddd".equals(str)){lit.add("qqq");}System.out.print(str+" "); //aaa bbb ccc ddd }System.out.println();System.out.println(list); //[aaa, bbb, ccc, ddd, qqq]}
}
五种方法对比:

相关文章:
JAVA学习日记(十四)集合进阶
一、单列集合Collection List系列集合特点:添加的元素是有序(存和取的顺序一致)、可重复、有索引 Set系列集合特点:添加的元素是无序(存和取的顺序有可能不一致)、不重复、无索引 Collection是所有单列集合…...
mysql全量与增量备份
binlog日志: 从上一次全量备份到下一次全量备份直接产生的数据。 一、全备和增量备份介绍 1、全量备份: 备份所有数据库或只备份一个数据库,全量备份之后,全量备份之前的binlog日志就没用了,一般生产环境会保留3-7天…...
“非法”操控lambda(python)
能过python解释器关卡即是合法脚本代码,偶尔的“违规”操控也是一种唯美。 (笔记模板由python脚本于2024年11月13日 11:18:21创建,本篇笔记适合熟悉python的lambda操控的coder翻阅) 【学习的细节是欢悦的历程】 Python 官网:https://www.pyth…...
UDP协议和TCP协议之间有什么具体区别?
UDP(User Datagram Protocol)和TCP(Transmission Control Protocol)是两种常见的网络传输协议,它们在数据传输中有着显著的区别和适用场景。理解它们的区别对于网络工程师、软件开发人员以及网络安全专家都是至关重要的…...
论文5—《基于改进YOLOv5s的轻量化金银花识别方法》文献阅读分析报告
论文报告:基于改进YOLOv5s的轻量化金银花识别方法 论文报告文档 基于改进YOLOv5s的轻量化金银花识别方法 论文报告文档摘要国内外研究现状国内研究现状国外研究现状 研究目的研究问题使用的研究方法试验研究结果文献结论创新点和对现有研究的贡献1. 目标检测技术2. …...
快手直播间采集教程,快手引流,快手截流,截流工具,直播间截流,快手直播间采集,获客系统,获客软件
功能: 1.输入快手直播间链接可一键监控直播间 2.可采集新进直播间的人 3.可采集直播间所有动作,包含:发弹幕的人和内容、送礼物的人和送的礼物、点亮爱心的人 4.可一键导出新进直播间的快手ID 5.可一键导出直播间动作列表,也可以筛…...
探索MoviePy:Python视频编辑的瑞士军刀
文章目录 🎬 探索MoviePy:Python视频编辑的瑞士军刀第一部分:背景介绍第二部分:MoviePy是什么?第三部分:如何安装MoviePy?第四部分:MoviePy的基本函数使用方法1. 视频剪辑2. 视频拼接…...
mysql 实现分库分表之 --- 基于 MyCAT 的分片策略详解
引言 在我们日常工作的项目中,特别是面向 C 端用户的产品,随着业务量的逐步扩大,数据量也呈指数级增长。为了应对日益增长的数据库压力,数据库优化已成为项目中不可或缺的一环,而分库分表则是海量数据优化方案中的重要…...
Opencascade基础教程(14): 一个模型显示问题
如果显示模型时出现如图情况,正对屏幕的平面特别亮,只需要设置材质为非金属就行。 //创建box并显示TopoDS_Shape aShape BRepPrimAPI_MakeBox(100, 100, 100);Handle(AIS_Shape) aisShpae new AIS_Shape(aShape);aisShpae->SetDisplayMode(AIS_Shad…...
ISP——你可以从这里起步(二)
接上一篇,上一篇是原理篇,这一篇是实战篇,为了实现下面框图中的不完美ISP。 第一章 做一张RAW图自己用 不是所有的人都能获得raw图,即使获得了raw图也需要对应的sensor参数才能把它用起来,所以我找了一条野路子可以把…...
Qt / Qt Quick程序打包的一些坑 (四)
【写在前面】 打包方法见 Qt / Qt Quick程序打包的方法。 这里是再次记录一些坑。 【正文开始】 直接进入正题: 在 Qt5 中,如果我们的 Qml 中使用了【Qt Shapes】模块,那么在打包的时候,会缺少Qt5QuickShapes.dll。 然后ÿ…...
《传统视觉算法在视觉算法中的地位及应用场景
一、引言 在计算机视觉领域的发展历程中,传统视觉算法扮演了至关重要的角色。尽管近年来深度学习算法在视觉任务中取得了巨大的成功,但传统视觉算法依然具有不可替代的地位。传统视觉算法通常基于数学模型和手工设计的特征,具有计算效率高、…...
老老实实干一辈子程序员是没出息的!这本证书你早该学!
一、程序员有没有必要学软考? 当然有,因为你不可能一辈子都是程序员。 你了解或者接触过30岁、35岁以上的程序员去向吗? 我毕业快十年了,当初正赶上互联网时代的浪潮,好几个学计算机的同学毕业后去了一线城市或者深…...
鸿蒙next版开发:相机开发-录像(ArkTS)
在HarmonyOS 5.0中,ArkTS提供了一套完整的API来管理相机功能,特别是录像功能。本文将详细介绍如何在ArkTS中实现录像功能,并提供代码示例进行详细解读。 录像功能开发步骤 1. 导入相关接口 首先,需要导入相机相关的接口&#x…...
闯关leetcode——3206. Alternating Groups I
大纲 题目地址内容 解题代码地址 题目 地址 https://leetcode.com/problems/alternating-groups-i/description/ 内容 There is a circle of red and blue tiles. You are given an array of integers colors. The color of tile i is represented by colors[i]: colors[i…...
多个摄像机画面融合:找到同一个目标在多个画面中的伪三维坐标,找出这几个摄像头间的转换矩阵
搞算法,重要的是解决问题的思想,不要再局限于语言、框架、性能!!! 要解决的问题是:在某一个摄像头画面中,目标会被遮挡或者丢失,但在另外一个摄像机画面中,目标完整&…...
Three.js性能优化和实践建议
Three.js 是一个功能强大的 3D 引擎,当场景足够大的时候,就会出现卡顿的现象,首先要保证电脑的性能够用,然后看看下面方法,帮助你提高应用的运行效率。 1. 使用 stats.js 监视性能 在进行任何优化之前,首…...
C#入门 023 什么是类(Class)
什么是“类” 是一种数据结构 是一种数据类型 代表现实世界中的“种类” 构造器和析构器 析构器 析构器(Destructor)是一种特殊的成员方法,用于在对象被垃圾回收器(Garbage Collector, GC)回收之前执行清理操作。…...
一篇Spring Boot 笔记
一、Spring Boot 简介 Spring Boot 是一个用于创建独立的、基于 Spring 的生产级应用程序的框架。它简化了 Spring 应用的初始搭建和开发过程,通过自动配置等功能,让开发者能够快速地构建应用,减少了大量的样板代码和复杂的配置。 二、核心特…...
一生一芯 预学习阶段 NEMU代码学习(2)
接上回:一生一芯 预学习阶段 NEMU代码学习(1) 上次说到这里 static int cmd_c(char *args) {cpu_exec(-1);return 0; } 当输入c时,会执行:cpu_exec(-1); void cpu_exec(uint64_t n) {g_print_step (n < MAX_IN…...
Python爬虫实战:研究MechanicalSoup库相关技术
一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...
第19节 Node.js Express 框架
Express 是一个为Node.js设计的web开发框架,它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用,和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...
linux之kylin系统nginx的安装
一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源(HTML/CSS/图片等),响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址,提高安全性 3.负载均衡服务器 支持多种策略分发流量…...
【Oracle APEX开发小技巧12】
有如下需求: 有一个问题反馈页面,要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据,方便管理员及时处理反馈。 我的方法:直接将逻辑写在SQL中,这样可以直接在页面展示 完整代码: SELECTSF.FE…...
阿里云ACP云计算备考笔记 (5)——弹性伸缩
目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...
visual studio 2022更改主题为深色
visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中,选择 环境 -> 常规 ,将其中的颜色主题改成深色 点击确定,更改完成...
从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路
进入2025年以来,尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断,但全球市场热度依然高涨,入局者持续增加。 以国内市场为例,天眼查专业版数据显示,截至5月底,我国现存在业、存续状态的机器人相关企…...
定时器任务——若依源码分析
分析util包下面的工具类schedule utils: ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类,封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz,先构建任务的 JobD…...
高等数学(下)题型笔记(八)空间解析几何与向量代数
目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...
ardupilot 开发环境eclipse 中import 缺少C++
目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...
