容器
Collection 继承树:
Map 继承树:
Collection (集合)
容器层次结构中的根接口
-
Collection 表示一组对象,这些对象也称为集合的元素。
-
JDK 不提供此接口的任何直接实现:它提供更具体的子接口(如 Set 和 List)实现。此接口通常用来传递 collection,并在需要最大普遍性的地方操作这些 collection。
list子接口:有序的可重复
set子接口 :无序的不可重复
Queue子接口:队列 先进先出
Map (映射)
容器层次结构中的根接口
与Collection不同 Map中的元素是成对儿存在的
将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。
存储键值对形式的数据 key-value (K-V)
各容器对比:
Collection:
名称 | 顺序 | 重复 | 线程 | 序列化 | 底层 | 查询 | 增删 | 超类 |
---|---|---|---|---|---|---|---|---|
List (I) | 有序 | 可重复 | Collection | |||||
Vector | 有序 | 可重复 | 安全 | 可以 | 数组 | 慢 | 慢 | List |
ArrayList | 有序 | 可重复 | 不安全 | 不可以 | 数组 | 快 | 慢 | List |
LinkedList | 有序 | 可重复 | 不安全 | 可以 | 双向链表 | 慢 | 快 | List&Queue |
Set (I) | 无序 | 不可重复 | Collection | |||||
TreeSet | 有序 | 不可重复 | 不安全 | 可以 | 红黑树 | Set | ||
HashSet | 无序 | 不可重复 | 不安全 | HashMap | Set | |||
LinkedHashSet | 无序 | 不可重复 | 不安全 | LinkedHashMap | HashSet | |||
Queue (I) | Collection |
Map:
名称 | 顺序 | 重复 | 线程 | 序列化 | 底层 | 查询 | 增删 | 超类 |
---|---|---|---|---|---|---|---|---|
HashTable | 无序 | 可重复 | 安全 | 哈希表 | Map | |||
HashMap | 无序 | 可重复 | 不安全 | 哈希表 | Map | |||
LinkedHashMap | 有序 | 可重复 | 不安全 | 哈希表 双向链表 | HashMap | |||
TreeMap | 有序 | 不可重复 | 不安全 | 红黑树 | Map |
特点总结:
标识 | 特点 |
---|---|
Linked | 链式顺序 有序 增删块 |
Array | 查询快 增删慢 |
Hash | 查询最快 无序 |
Tree | 升序 有序★ 不可重复 |
LinkedHash | 链式顺序 增删块 查询快 |
Victor | 同步的 增删 查询 都较慢 |
set | 无序 不可重复 |
list | 有序 可重复 |
问题
1.ArrayList扩容
初始化
底层动态数组
参数等于0 初始化为 空数组
参数不等于0 初始化为 容量10的数组
扩容时机
当数组的大小大于初始容量的时候
(比如初始为10,当添加第11个元素的时候),
就会进行扩容,新的容量为旧的容量的1.5倍。
扩容方式
新建原数组的拷贝,修改原数组,指向这个新数组,原数组被抛弃,会被GC回收。
2.Vector扩容
2倍扩容
3.HashSet扩容
默认初始容量16
加载因子0.75
扩容是原容量的2倍