回炉重造java----单列集合(List,Set)

体系结构:  集合主要分为两种,单列集合collection和双列集合Map,区别在于单列集合一次插入一条数据,而双列的一次插入类似于key-value的形式

单列集合collection

294a9d0a1bc64a7ea78ef4c9eab9bc64.jpg

注:红色的表示是接口,蓝色的是实现类

7aa0297e45ba47c1bb2d024735e3dead.jpg

①操作功能:

714219247fc94d5abe7479f485de75f4.jpg增加: add(),List的新增一定是成功的,而Set不一定因为其有不能重复的限制条件

清空:clear()

删除:remove(),因为collection中定义的是共性的方法,所以删除不能通过索引去删除

判断是否存在:contains(),其底层是通过equals()方法实现的,因为equals()方法是基于比较地址值,所以如果集合中存的是对象的话,要重写equals()方法才能进行contains的比较

判断是否为空:isEmpty()

返回集合大小:size()

②遍历方式:

集合的遍历方式有三种,分别是迭代器遍历,增强for遍历和lambda表达式遍历

迭代器(Iterator)遍历:创建Iterator对象进行遍历

5dc442935a4e4233a7cde1b71295cd99.jpg

注:   迭代完毕指针不会复位;循环中next()只能用一次;迭代过程中不允许使用集合的方法增加删除

增强for遍历:底层其实就是迭代器   

b21d3e1c4a9b4367a1d375cb91fc18fa.jpg

注:   集合名.for快速生成;对s中的修改不对集合的原数据有影响

Lambda表达式(foreach)遍历:底层就是遍历集合通过accept方法依次过的元素

170150d4c6224a02bf46febc5a95b1d8.jpg

③List

db5e5cc96ca6443497d9fc1ce5840778.jpg

 注:  remove的时候如果有方法重载了,优先调用形参和实参类型一样的方法。remove(1)是索引

遍历方式:  相比于collection的3种遍历方式,List当然全部继承了,但是因为List有了索引的机制,所以List还增加了两种,普通的for循环和列表迭代器(listIterator)

cfc1c11724324f28aa473125afaffaeb.jpg

数据结构:

69b0b34aaed6469698d07d84e0a9ee47.jpg

 ArrayList详解:底层是数组

5a077adb8d5e42728fd64d62e12d44e3.jpg

 源码:277e9c1091b64dd98b0bc675227e8fd7.jpg

①创建ArrayList时是一个长度为0的elementData

②在插入第一个元素时,将扩容为长度为10的数组,然后把数据放进去

b389b39548a74bbbb9fcf0c8abbf7b83.jpg ①当原数组的长度已经用完了,底层就要去扩容,默认是扩容原数组长度的一半,即1.5倍

②如果插入的数据长度很大,就会扩容到大长度的地方

LinkedList详解:底层是双向链表

4e2c1c84214344dc87b5a70f3b4b30a0.jpg

 注: 这里的方法基本不用,而是基本使用List的方法

源码:学了数据结构中的双向链表就可以清楚的知道其操作流程

1c466b51d89940f1a5eaf119981a17a8.png

④Set

泛型: 

c4287671249543ea98a45f15d451104a.png

泛型的作用: 

704064569c2c4f04a83f7593fc0a3dd0.png

 java中的泛型其实是伪泛型:即其实底层存的时候依然是object对象,泛型会擦除

fb88d05e74f34aa08b9db07ac13fc2c8.png

泛型可以定义在类上,也可以定义在方法上,还可以定义在接口上 

HashSet详解:  底层是哈希表,jdk8之前是数组+链表,jdk8之后是数组+链表+红黑树

b6a6e82fe31b430c8e826b0a0f5edfd1.jpg

 存数据的过程:①由hashcode计算出应存入的位置②如果位置是空就放进去③如果不为空,则调用equals方法去判断是否一样的,如果一样的就不存④如果不一样的话,jdk8之前是把新元素放进去,老元素取出来挂在新元素后面,而jdk8之后就是直接把新元素挂在老元素的后面

80567b1f65c2472096030e5f51034e6e.jpg

 注意点:

c09cdad990244610be11fd64d2edcb87.jpg

LinkedHashSet详解:  底层跟HashSet一样,不过在其基础上加上了数据之间的双向链表结构,使得其变成有序的

7f1f2b86ae10442f8448bb84e6a84e2a.jpg

TreeSet详解:  底层是红黑树,性能好

e091477e82e14fb4b6d5e1b7c04b70c7.jpg

总结:各种单列集合的应用场景:

66bb62c3eef547d0b62c6aea025f73fd.jpg

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

探索震坤行API:一键解锁高效工业用品采购新纪元!

震坤行是一家专注于工业用品的B2B电商平台,为企业客户提供一站式的工业用品采购服务。虽然震坤行没有直接公开通用的API接口供开发者调用,但通常大型企业或合作伙伴之间可以通过API进行系统集成和数据交互。以下是一个假设性的震坤行API接口调用示例与代…

博特激光:355nm高精度紫外激光打标机带来极致工艺

紫外激光打标机在现代制造业和技术中的应用,的确在准确度和精密度方面带来了革命性的提高。特别是在微电子、半导体、医疗器械、高端消费品等需要高精度、高清晰打标的行业,紫外激光打标机以其独特的优势,赋予产品极致的工艺品质。 以下是UV激…

软件测试之 接口测试 Postman使用

接口测试 URL HTTP协议 HTTP 请求部分 HTTP响应部分 Postman使用 界面介绍 这里 注意 如果你无法访问 那么 captchaImage这个打错了,给的资料中是错误的地址 https://kdtx-test.itheima.net/api/captchaImage登录接口 科大天下 第一个接口的登录设置 https://kd…

基于vgg16和efficientnet卷积神经网络的天气识别系统(pytorch框架)全网首发【图像识别-天气分类】

一个能够从给定的环境图像中自动识别并分类天气(如晴天、多云、雨天、雪天等)的系统。 技术栈: 深度学习框架:PyTorch基础模型:VGG16与EfficientNet任务类型:计算机视觉中的图像分类 模型选择 VGG16 VGG…

Redis 源码安装(CentOS 单机)

序言 本文给大家介绍如何在 CentOS 上,通过 Redis 源码单机部署 Redis 服务。 一、部署流程 通过官网下载源码 # 下载源码 wget https://download.redis.io/redis-stable.tar.gz# 解压源码包 tar -xzvf redis-stable.tar.gz在 linux 中执行以下命令,安…

信息系统项目管理师0101:项目建议与立项申请(7项目立项管理—7.1项目建议与立项申请)

点击查看专栏目录 文章目录 第七章 项目立项管理7.1项目建议与立项申请1.立项申请概念2.项目建议书内容记忆要点总结第七章 项目立项管理 项目立项管理是对拟规划和实施的项目技术上的先进性、适用性,经济上的合理性、效益性,实施上的可能性、风险性以及社会价值的有效性、可…

Java面试——MyBatis

优质博文:IT-BLOG-CN 一、MyBatis 与 JDBC 的区别 【1】JDBC 是 Java 提供操作数据库的 API;MyBatis 是一个持久层 ORM 框架,底层是对 JDBC 的封装。 【2】使用 JDBC 需要连接数据库,注册驱动和数据库信息工作量大,每…

Html生成自定义函数的图形(2024/5/10)

大概效果如下: 可以自定义函数和x的定义域。 我们可以使用数学表达式解析库来解析用户输入的函数方程,并根据给定的 x 区间计算函数的值,然后使用图表库绘制图形。 在这里,我将使用 math.js 库来解析数学表达式,并使…

linux fdisk 银河麒麟操作系统 v10 磁盘分区和挂载 详细教程

1查看 未加载的磁盘 fdisk -l 2 开始分区 fdisk /dev/vdb #查看分区 #新建分区和保存 3 格式化和挂载 fdisk -l mkfs.xfs /dev/vdb1 #查看uuid blkid /dev/vdb1 mkdir /data vi /etc/fstab UUID209daa-fb1c-48f2-bf5e-e63f38cb8a /data xfs defaults 0 0 #加载下 mo…

Java 各类注解、Bean、作用域、生命周期

这里写目录标题 一、注解和Bean创建时机1. Controller:2.RestController:3.Service:4.Repository:5.Component: 二、作用域1.Singleton:2.Prototype:3.Request:4.Session: 一、注解和Bean创建时机 1. Controller: Bean生成时机: 在应用程序启动时由Spring容器创建。作用域: 默…

力扣每日一题37:解数独

目录 题目 大致思路 方法一:回溯剪枝(正常人能想出来的) 方法二:位运算优化剪枝 需要使用的位运算技巧 代码 位运算怎么就优化了呢? 方法三:枚举优化。 官解代码 方法四:舞蹈链算法 题…

机器学习-Padans

机器学习-Padans 面对人生的烦恼与挫折,最重要的是摆正自己的心态,积极面对一切。再苦再累,也要保持微笑。笑一笑,你的人生会更美好! 目录 机器学习-Padans 1.DataFrame 2.画图 3. 扩展: 1.DataFrame #…

一键局域网共享工具

一键局域网共享工具:实现文件快速共享的新选择 在数字化时代,文件共享已成为我们日常工作和生活中的重要需求。无论是在家庭还是在办公环境中,我们经常需要在不同的设备之间传输文件。为了满足这一需求,一键局域网共享工具应运而…

python爬虫(三)之虎嗅网汽车文章爬虫

python爬虫(三)之虎嗅网汽车文章爬虫 闲来没事,闲鱼上有个好兄弟要我从虎嗅网上抓一些汽车文章的爬虫,于是大力出奇迹,我写了一个python程序,将这个网站上所有的汽车文章全部抓取下来了,存储到…

(三十九)第 6 章 树和二叉树(二叉树的三叉链表存储)

1. 背景说明 2. 示例代码 1) errorRecord.h // 记录错误宏定义头文件#ifndef ERROR_RECORD_H #define ERROR_RECORD_H#include <stdio.h> #include <string.h> #include <stdint.h>// 从文件路径中提取文件名 #define FILE_NAME(X) strrchr(X, \\) ? strrc…

RF Plasma gernerator-系列(RF-5KW Adtec)说明书TX06-9001-00

RF Plasma gernerator-系列(RF-5KW Adtec)说明书TX06-9001-00

C++随手写一个打字练习软件TL(TypeLetters)附原码

C随手写一个打字练习软件TL&#xff08;TypeLetters&#xff09;附原码 说明 软件名称&#xff1a;TL&#xff08;TypeLetters&#xff09; 开发语言&#xff1a;C 适合人群&#xff1a;零基础小白或C学习者 软件功能&#xff1a;打字练习软件TL&#xff08;TypeLetters&#…

【树莓派4B】如何用树莓派的串口发送数据给单片机

文章目录 查看路由器中的树莓派IProot连接打开vnc远程桌面服务打开win的远程桌面软件输入IP和端口串口发送数据硬件连接树莓派发送 查看路由器中的树莓派IP root连接 打开vnc远程桌面服务 vncserver :1打开win的远程桌面软件 输入IP和端口 192.168.3.33:1输入密码qwer1234后点…

2019年计算机真题

2019年计算机真题 离散数学 一、用逻辑符号表达下列语句(论域为包含一切事物的集合) 1&#xff09;过平面上的两个点&#xff0c;有且仅有一条直线通过。 解: (1) P ( x , y ) : x , y \mathrm{P}_{(\mathrm{x}, \mathrm{y})}: \mathrm{x}, \mathrm{y} P(x,y)​:x,y 是平面上的…

Vitis HLS 学习笔记--理解串流Stream(3)

目录 1. 简介 2. 综合报告的差别 2.1 包含 do-while 2.2 不包含 do-while 2.3 报告差异分析 3. 总结 1. 简介 针对《Vitis HLS 学习笔记--理解串流Stream(2)-CSDN博客》博文的内容&#xff0c;做进一步说明。 2. 综合报告的差别 2.1 包含 do-while Performance & …