韩顺平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