集合
集合
优点
- 动态保存任意多个对象,使用方便
- 提供了一系列方便的方法
框架体系
- 分为两组:
- 单列集合:单个对象
List
、Set
实现的子类
- 双列集合:键值对
Map
实现的子类
iterator
- 使用
iterator()
方法返回一个迭代器
- 使用
iterator.hasNext()
- 再次遍历则重置迭代器
List接口
ArrayList
- 基本等同于
Vector
,但ArrayList
是线程不安全的(效率高),在多线程的情况下一般使用Vector
源码分析
ArrayList
中维护了一个Object
类型的数组transient Object[] elementData
- 创建对象时,入伙使用的时无参构造器,则初始elementData容量为0
- 添加元素时,先判断是否需要扩容,如需要,则调用
grow()
方法,使容量变为1.5
倍
Vector
Vector
的所有方法都是带Synchronized
,都是线程同步的、线程安全的(多线程开发时)
源码分析
Vector
中维护了一个Object
类型的数组transient Object[] elementData
- 创建对象时,入伙使用的时无参构造器,则初始elementData容量为10
- 添加元素时,先判断是否需要扩容,如需要,则调用
grow()
方法,使容量变为2
倍
LinkedList
- 底层实现了双向链表和双端队列的特点
- 可以添加任意元素
- 线程不安全
底层结构
- 维护了一个双向链表
- 维护了两个属性:
first
、last
Set接口
- 基本介绍:
- 无序,无法索引,顺序取决于hash后索引的结果
- 不允许重复的元素
HashSet
底层机制
- HashSet底层是HashMap
- 添加一个元素时,先得到hash值,再转换成索引值
- 找到存储数据表table,看这个索引位置是否已经存放元素
- 没有则直接加入
- 有则对用
equals()
比较
- 相同则放弃添加
- 不相同则添加到最后
- 如果一条链表的元素个数超过
TREEIFY_THRESHOLD
(默认为8),并且table的大小>= MIN_TREEIFY_CAPACITY
(默认64),则进化为红黑树