java集合进阶篇-《Collection集合》

 fb8de8859c844d028407ce53a6a44a91.png

dc36953054264521b68a923efe53222c.png个人主页→VON

 

cebd6b4f65b24cda84e774c03af300c0.png收录专栏→java从入门到起飞

目录

 

一、前言

二、Collection集合简要概述

Collection的主要实现

Collection的方法

迭代器(Iterator)

三、单列集合顶层接口Collection

CollectionDemo01

CollectionDemo02

CollectionDemo03

CollectionDemo04

CollectionDemo05


 

一、前言

java中的集合也是一个重点,同样也是难点,涉及到的东西较多较杂,希望大家能够和我一起来学习java集合进阶方面的知识。预计一周的时间将java集合进阶部分拿下,加油。

二、Collection集合简要概述

在Java中,java.util.Collection 是一个接口,它是所有Java集合框架的根。它定义了集合类必须实现的基本操作,如添加元素、删除元素、迭代等。所有的集合类(如 List, Set, Queue 等)都是 Collection 接口的直接或间接实现。

Collection的主要实现

  1. List:这是一个有序的集合,可以包含重复的元素,并且可以通过索引访问元素。主要的实现包括:

    • ArrayList:实现了基于动态数组的数据结构。
    • LinkedList:实现了基于双向链表的数据结构。
    • Vector:与 ArrayList 类似,但是线程安全的。
  2. Set:这是一个不允许有重复元素的集合。主要的实现包括:

    • HashSet:提供了一个平均性能较高的实现,不保证元素的顺序。
    • TreeSet:提供了排序功能,元素按自然顺序或由 Comparator 指定的顺序进行排序。
    • LinkedHashSet:结合了 HashSet 和 LinkedHashMap 的特性,维护了插入顺序。
  3. Queue:用于按照特定顺序保持元素的集合,主要用于FIFO(先进先出)情况。主要的实现包括:

    • LinkedList:实现 Queue 接口,并提供队列操作。
    • PriorityQueue:按照优先级顺序对元素进行排序。

Collection的方法

Collection 接口定义了一些常用的方法,比如:

  • boolean add(E e):向集合中添加一个元素。
  • boolean remove(Object o):从集合中移除指定的元素。
  • void clear():移除集合中的所有元素。
  • boolean contains(Object o):如果此集合包含指定元素,则返回 true
  • Iterator<E> iterator():返回集合的迭代器。
  • int size():返回集合中的元素数量。
  • boolean isEmpty():如果集合不包含任何元素,则返回 true

迭代器(Iterator)

Iterator 接口是 Collection 中的一个内部接口,用于遍历集合中的元素。它提供了 hasNext() 方法来检查集合中是否还有更多的元素,以及 next() 方法来获取集合中的下一个元素。

三、单列集合顶层接口Collection

CollectionDemo01

关于Collection的一些常见函数的使用 

package ArrayDemo.CollectionDemo;import java.util.ArrayList;
import java.util.Collection;public class A01_CollectionDemo01 {public static void main(String[] args) {// 注:// Collection是一个接口,不能够直接创建他的对象// 只能创建他实现类的对象Collection<String> coll = new ArrayList<>();// 集合中常见方法// 1.添加元素// List系列的允许元素重复// Set系列的不允许元素重复coll.add("a");coll.add("b");coll.add("c");System.out.println(coll);// [a, b, c]// 2.清空/*coll.clear();System.out.println(coll);*/ // []// 3.删除// 注:因为Collection里面定义的是共性的方法,所以此时不能通过索引进行删除。只能通过元素的对象进行删除System.out.println(coll.remove("a"));// true// 如果删除成功返回true,删除失败返回FalseSystem.out.println(coll.remove("d"));// falseSystem.out.println(coll);// [b, c]// 4.判断元素是否包含// 底层是依赖equals方法进行判断是否存在的// 所以,如果集合中储存的是自定义对象,也想通过contains方法来判断是否包含,那么在javabean中,一定要重写equals方法System.out.println(coll.contains("a"));// falseSystem.out.println(coll.contains("b"));// trueSystem.out.println(coll.contains("c"));// true// 5.判断集合是否为空boolean result = coll.isEmpty();System.out.println(result);// false// 6.获取集合的长度int size = coll.size();System.out.println(size);// 2}
}

CollectionDemo02

思考一下为什么结果为false?

package ArrayDemo.CollectionDemo;import java.util.ArrayList;
import java.util.Collection;public class A02_CollectionDemo02 {public static void main(String[] args) {// 1.创建集合对象Collection<Student> coll = new ArrayList<>();// 2.创建三个 学生对象Student s1 = new Student("zhang",18);Student s2 = new Student("li",19);Student s3 = new Student("wang",20);// 3.将学生对象添加到集合中coll.add(s1);coll.add(s2);coll.add(s3);// 4.判断集合中某一个学生对象是否包含Student s4 = new Student("zhang",18);System.out.println(coll.contains(s4));// false}
}

 不知道你们有没有疑问,明明集合中有该对象,但是判断的时候结果却是false。

原因如下:

因为contains方法底层依赖equals方法判断对象是否一致的

如果存的是自定义对象,没有重写equals方法,那么默认使用Object类中的equals方法进行判断,而Object类中equals方法,依赖地址值进行判断。

解决方法:

在类中的javabean中重写equals方法
重写之后结果为true

ab0e2d01808c444c80468dbaf69dd341.png

CollectionDemo03

利用迭代器遍历集合中的数据

package ArrayDemo.CollectionDemo;import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;public class A03_CollectionDemo03 {public static void main(String[] args) {/*Collection系列集合三种通用的遍历方式1.迭代器遍历2.增强for遍历3.lambda表达式遍历迭代器相关的三个方法1.Iterator<E>iterator():获取一个迭代器对象2.boolean hasNext()    :判断当前指向的位置是否有元素3.E next()             :获取当前指向的元素并移动指针*/// 1.创建集合并添加集合元素Collection<String> coll = new ArrayList<>();coll.add("a");coll.add("b");coll.add("c");coll.add("d");// 2.获取迭代器对象Iterator<String> it = coll.iterator();// 3.利用循环去获取元素while(it.hasNext()){// 4.获取元素并移动指针System.out.println(it.next());}}
}

使用迭代器遍历集合的时候要注意以下几点: 

// 注:
// 1.报错NoSuchElementException
// 2.迭代器遍历完毕,指针不会复位
// 3.循环中只能用一次next方法
// 4.迭代器遍历时,不能用集合的方法进行增加或者删除
// 如果想要删除元素,可以用迭代器提供的remove方法进行删除
// 如果要添加,暂时没有方法

// 报错NoSuchElementException
// System.out.println(it.next());// NoSuchElementException

// 迭代器遍历完毕,指针不会复位
// System.out.println(it.hasNext());// false

CollectionDemo04

增强for循环遍历

package ArrayDemo.CollectionDemo;import java.util.ArrayList;
import java.util.Collection;public class A04_CollectionDemo04 {public static void main(String[] args) {// 增强for遍历// for(数据类型 变量名:集合/数组){//// }// 1.创建集合并添加集合元素Collection<String> coll = new ArrayList<>();coll.add("a");coll.add("b");coll.add("c");coll.add("d");// 2.利用增强for进行遍历// s就是一个第三方变量,在循环过程中依次表示集合中的每一个数据for (String s : coll) {s="s";}System.out.println(coll);// [a, b, c, d]// 注:// 修改增强for中的变量,不会改变集合原本的数据}
}

自我感觉最好用的一种遍历方式并且有快捷键。

快捷键:集合.for

CollectionDemo05

package ArrayDemo.CollectionDemo;import java.util.ArrayList;
import java.util.Collection;
import java.util.function.Consumer;public class A05_CollectionDemo05 {public static void main(String[] args) {// 1.创建集合并添加集合元素Collection<String> coll = new ArrayList<>();coll.add("a");coll.add("b");coll.add("c");coll.add("d");// 2.利用匿名内部类的形式// 底层原理:// 将每一个元素都传递给下面的accept方法coll.forEach(new Consumer<String>() {@Overridepublic void accept(String s) {System.out.println(s);}});// lambda表达式coll.forEach (s->System.out.println(s));}
}

这个我也不是太理解,希望各位大佬给予指导。 

 

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

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

相关文章

问题记录:matlab中spatial contact force模块下关于stiffness(刚度)的设定

最近在搞一阶倒立摆&#xff0c;在matlab仿真时遇到这样的问题&#xff1a;stiffness设置为10e5就会发生碰撞后穿透&#xff0c;&#xff08;四个spatial contact force模块是分别连接小车四个轮子和地面的&#xff09; 而设置成10e6就不会有问题&#xff0c; 由于本人也是第一…

微信小程序上传组件封装uploadHelper2.0使用整理

一、uploadHelper2.0使用步骤说明 uploadHelper.js ---上传代码封装库 cos-wx-sdk-v5.min.js---腾讯云&#xff0c;对象存储封装库 第一步&#xff0c;下载组件代码&#xff0c;放置到自己的小程序项目中 第二步、 创建上传对象&#xff0c;执行选择图片/视频 var _this th…

【H2O2|全栈】关于CSS(14)如何完成常规的页面布局

目录 基本布局方式 前言 准备工作 管理系统界面 APP界面 区域内的滚动条 结束语 基本布局方式 前言 通过上一次学习如何让页面适应任意屏幕的学习&#xff0c;我们就可以开始学习如何用代码“画”出基本的框架了。本期主要分享如何绘制基本的PC端管理系统和移动端APP的…

新颖的 setTimeout() 替代方案

在前端开发中&#xff0c;长时间运行的JavaScript任务一直是一个棘手的问题。它们会导致页面无响应&#xff0c;影响用户体验。传统上&#xff0c;开发者使用setTimeout()来分割长任务&#xff0c;但这种方法存在明显的缺陷。最近&#xff0c;Chrome 129引入了一种新的、更高效…

机器学习面试笔试知识点-线性回归、逻辑回归(Logistics Regression)和支持向量机(SVM)

机器学习面试笔试知识点-线性回归、逻辑回归Logistics Regression和支持向量机SVM 一、线性回归1.线性回归的假设函数2.线性回归的损失函数(Loss Function)两者区别3.简述岭回归与Lasso回归以及使用场景4.什么场景下用L1、L2正则化5.什么是ElasticNet回归6.ElasticNet回归的使…

视频云存储/音视频流媒体视频平台EasyCVR视频汇聚平台在欧拉系统中启动失败是什么原因?

视频监控/视频集中存储/磁盘阵列EasyCVR视频汇聚平台具备强大的拓展性和灵活性&#xff0c;支持多种视频流的外部分发&#xff0c;如RTMP、RTSP、HTTP-FLV、WebSocket-FLV、HLS、WebRTC、fmp4等&#xff0c;这为其在各种复杂环境下的部署提供了便利。 安防监控EasyCVR视频汇聚平…

分布式数据库安全可靠测评名录之平凯数据库(TiDB企业版)

作者&#xff1a; 数据源的TiDB学习之路 原文来源&#xff1a; https://tidb.net/blog/d052ee0b 2024 年 9 月 30 日&#xff0c;中国信息安全测评中心公布安全可靠测评结果公告&#xff08;2024年第2号&#xff09;&#xff0c;其中包含 6 款集中式数据库和 11 款分布式数据…

鸿蒙网络编程系列30-断点续传下载文件示例

1. 断点续传简介 在文件的下载中&#xff0c;特别是大文件的下载中&#xff0c;可能会出现各种原因导致的下载暂停情况&#xff0c;如果不做特殊处理&#xff0c;下次还需要从头开始下载&#xff0c;既浪费了时间&#xff0c;又浪费了流量。不过&#xff0c;HTTP协议通过Range…

信息安全工程师(58)网络安全漏洞处置技术与应用

前言 网络安全漏洞处置技术与应用是一个复杂而关键的领域&#xff0c;它涉及漏洞的发现、评估、修补以及后续的监控与防范等多个环节。 一、网络安全漏洞发现技术 网络安全漏洞发现技术是漏洞处置的首要步骤&#xff0c;它旨在通过各种手段识别出网络系统中存在的潜在漏洞。这些…

jupyter notebook远程连接服务器

jupyter notebook远程连接服务器 文章目录 jupyter notebook远程连接服务器jupyter是什么配置步骤安装jupyter生成jupyter配置文件编辑jupyter配置文件设置密码ssh隧道 启动顺序jupyter添加kernel下载ipykernel包添加kernel 测试遇到的问题 jupyter是什么 Jupyter Notebook是一…

数据结构之队列(python)

华子目录 1.队列存储结构1.1队列基本介绍1.2队列的实现方式 2.顺序队列2.1顺序队列的介绍2.2顺序队列的简单实现2.3代码实现 3.链式队列和基本操作3.1链式队列数据入队3.2链式队列数据出队3.3队列的链式表示和实现 1.队列存储结构 1.1队列基本介绍 队列的两端都"开口&qu…

FFmpeg 4.3 音视频-多路H265监控录放C++开发三 :安装QT5.14.2, 并将QT集成 到 VS2019中。

一&#xff0c;安装QT&#xff0c; 重点&#xff1a;在安装QT的时候要安装msvc201x版本的组件&#xff0c; 二 &#xff0c; 安装 qt-vs-tools Index of /development_releases/vsaddin/2.8.1 三&#xff0c;需要安装过 windows10 SDK&#xff0c;一般我们在安装vs2019的时候就…

餐饮店怎么标注地图位置信息?

随着市场竞争的日益激烈&#xff0c;商家若想在竞争中脱颖而出&#xff0c;就必须想方设法去提高自身的曝光度和知名度&#xff0c;为店铺带来更多的客流量。其中&#xff0c;地图标注便是一种简单却极为有效的方法。通过在地图平台上添加店铺位置信息&#xff0c;不仅可以方便…

电子级异丙醇溶液除硼树脂

电子级异丙醇溶液的净化除杂是一个精细的过程&#xff0c;旨在去除溶液中的杂质&#xff0c;以满足电子行业对高纯度化学品的严格要求。以下是电子级异丙醇溶液净化除杂的相关信息&#xff1a; 净化除杂方法 ● 精馏工序&#xff1a;通过精馏塔进行初步分离&#xff0c;去除大部…

(44)MATLAB读取语音信号进行频谱分析

文章目录 前言一、MATLAB代码二、仿真结果画图三、频谱分析 前言 语音信号是我们最常见的一种信号&#xff0c;本文使用MATLAB读取一段语音信号画出其波形&#xff0c;然后使用FFT变换给出其频谱&#xff0c;对其频谱进行分析。 一、MATLAB代码 读取语音数据并得出频谱的代码…

JMeter如何设置HTTP代理服务器?

1、 2、添加线程组 3、设置HTTP代理服务器&#xff0c;目标控制器选择“测试计划>线程组” 过滤掉不需要的信息 4、设置电脑手动代理 5、点击启动&#xff0c;在浏览器操作就可以了

Halcon实战——基于NCC模板匹配的芯片检测(附源码)

Halcon实战——基于NCC模板匹配的芯片检测&#xff08;附源码&#xff09; 关于作者 作者&#xff1a;小白熊 作者简介&#xff1a;精通python、matlab、c#语言&#xff0c;擅长机器学习&#xff0c;深度学习&#xff0c;机器视觉&#xff0c;目标检测&#xff0c;图像分类&am…

OpenCV高级图形用户界面(10)创建一个新的窗口函数namedWindow()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 创建一个窗口。 函数 namedWindow 创建一个可以作为图像和跟踪条占位符的窗口。创建的窗口通过它们的名字来引用。 如果已经存在同名的窗口&am…

应用层协议 序列化

自定义应用层协议 例子&#xff1a;网络版本计算器 序列化反序列化 序列化&#xff1a;将消息&#xff0c;昵称&#xff0c;日期整合成消息-昵称-日期 反序列化&#xff1a;消息-昵称-日期->消息&#xff0c;昵称&#xff0c;日期 在序列化中&#xff0c;定义一个结构体…

第8篇:网络安全基础

目录 引言 8.1 网络安全的基本概念 8.2 网络威胁与攻击类型 8.3 密码学的基本思想与加密算法 8.4 消息认证与数字签名 8.5 网络安全技术与协议 8.6 总结 第8篇&#xff1a;网络安全基础 引言 在现代信息社会中&#xff0c;计算机网络无处不在&#xff0c;从互联网到局…