韩顺平java基础-14-集合
韩顺平java基础-14-集合
集合介绍#
理解#
好处
框架体系图
主要有两组
Collection(单列集合)\Map(双列集合)
Collection#
Collection通用#
方法#
遍历#
迭代器遍历
iterator 底层原理:
hasNext()
快捷键:ctrl + j
增强for循环
本质仍然是iterator
在集合和数组中均可以使用
List#
通用#
接口
- 添加顺序与取出顺序一致,且可以重复
- 每个元素都有对应的顺序索引,且可以通过索引取出
常用方法
三种遍历
- iterator迭代器遍历
- 增强for循环
- 普通for循环(把list当作普通数组遍历)
LinkedList、Vector原理同List一致
ArrayList#
扩容机制#
- 无参构造器 初始大小为10 而后扩容为1.5倍
- 指定大小构造器 扩容为1.5倍
底层源码#
Vector#
扩容机制#
- 无参构造器 初始大小为10 而后扩容为2倍
- 指定大小构造器 扩容为2倍
LinkedList#
底层结构#
- 底层是双向链表
- 维护两个属性 first和last 分别指向 首节点和尾节点
- 每个结点(Node),里面维护了prev、next、item三个属性
- LinkedList的添加和删除,不是通过数组实现,相对来说效率较高
ArrayList和LinkedList的比较#
- ArrayList改查效率高
- LinkedList增删效率高
- 也可以根据业务灵活选择
Set#
通用#
HashSet#
特点
-
HashSet实现了Set接口,实际上是HashMap
-
可以存放null,但是只能有一个null
-
不保证元素是有序的
-
不能有重复元素
不能添加相同的元素 说明:
HashSet的底层机制
HashSet的底层是HashMap,HashMap的底层是(数组 + 链表 + 红黑树)
HashSet扩容机制
每向hashset增加一个元素,数组就会加一
LinkedHashSet#
基础#
- LinkedHashSet是HashSet的子类
- 维护了一个hash表和双向链表,在遍历时可以确保插入顺序和遍历顺序一致
- LinkedHashSet有head和tail,每一个节点有before和after属性,形成双向链表
源码分析#
- LinkedHashSet底层维护的是LinkedHashMap
- LinkedHashMap$Entry 继承--> HashMap$Node
Map#
接口特点#
- Map与Collection并列存在,保存具有映射关系的数据:key - Value(双列元素)Collection中value存放常量PRESENT
- Map中的key和value可以是任何引用类型的数据,会封装到HashMap$Node对象中
- Map中的key不允许重复,而value可以重复(key相当于Map中的索引,key-value是一一对应的关系,通过key就可以找到value(get()))
- Map的key和value可以为null
- 常用String类作为Map的key
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)