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

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

单列集合collection

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

①操作功能:

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

清空:clear()

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

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

判断是否为空:isEmpty()

返回集合大小:size()

②遍历方式:

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

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

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

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

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

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

③List

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

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

数据结构:

ArrayList详解:底层是数组

源码:

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

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

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

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

LinkedList详解:底层是双向链表

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

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

④Set

泛型:

泛型的作用:

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

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

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

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

注意点:

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

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

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

相关推荐
2601_966949654 分钟前
从轮询到策略消费:量化系统如何高效处理五档盘口数据
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
Mav8 分钟前
[个人学习记录]从零构建高性能 LLM 推理网关:Go 语言 SSE 流式转发、级联取消与背压
后端
卓怡学长19 分钟前
w233基于vue和springboot的宠物管理系统的设计与实现
java·vue.js·spring boot·spring·intellij-idea
狼爷23 分钟前
磁盘IO打满怎么办?我用5个真实案例,总结了这套可复用的排查方法论
后端·性能优化
我命由我1234532 分钟前
人脸识别 - 去重时间窗口
java·开发语言·python·学习·java-ee·学习方法·python3.11
小羊在睡觉41 分钟前
HLS视频
linux·后端·golang
逆境不可逃1 小时前
Pi Agent 学习笔记:一次提问背后的工具调用循环
java·笔记·学习
落魄大学生之流水线上谋生计1 小时前
Java并发核心机制详解:线程池、CAS、AQS、锁升级
java·开发语言·数据库
hahaha60161 小时前
HLS高层次综合设计技巧--数组
开发语言·嵌入式硬件·算法·fpga开发
aosky1 小时前
Linux 写内容到文件的几种方式
java·linux·服务器