Skip to content

集合的总结


⭐ 集合体系回顾 ​

Collection ​


Map ​


集合体系 ​

alt text

线程安全 ​

只有 Vector、Hashtable、Properties 是线程安全的,其余都不是线程的 ​

集合类及其特点总结 ​

类/接口所属接口底层实现主要特点
Collection接口实现了 Iterator 接口所有集合的顶层父接口
List接口实现了 Collection 接口有序、可重复元素
ArrayListList动态数组查询快、增删慢
VectorList动态数组查询快、效率低
LinkedListList双向链表增删快、查询慢、可做队列
Set接口实现了 Collection 接口无序、不重复元素
HashSetSetHashMap查询快、不保证顺序
LinkedHashSetSetLinkedHashMap有序(插入顺序)
TreeSetSetTreeMap(红黑树)可排序,有序
Map接口实现了 Collection 接口键值对集合,键唯一
HashMapMap数组+单链表+红黑树查询快、不保证顺序
LinkedHashMapMapHashMap + 双向链表有序(插入顺序)
HashtableMap哈希表效率低
PropertiesMap继承了 Hashtable属性配置专用,键值为字符串
TreeMapMap红黑树(Entry 节点)可排序,按 key 有序

集合选择 ​

根据存储元素确定集合的存储类型 ​

单列集合:存储一个值 ​

双列集合:存储键值对(Key - Value) ​

👉 单列集合:Collection 接口 ​

(1)允许重复:List 接口 ​

增删多:LinkedList(底层维护了一个双向链表) ​

改查多:ArrayList(底层维护 Object 类型的数组) ​

(2)不允许重复:Set 接口 ​

无序:HashSet(底层是 HashMap,底层结构:数组+链表+红黑树) ​

排序:TreeSet ​

插入和取出顺序一致:LinkedHashSet(底层是 LinkedHashMap,底层结构:数组 + 双向链表) ​

👉 双列集合(键值对):Map 接口 ​

(1)键值对:HashMap(底层采用哈希表(Hash Table),通过哈希函数对键进行散列,存储元素) ​

(2)键值对:TreeMap(底层采用红黑树) ​

1. 可以传入 Comparator 比较器,指定添加顺序 ​

2. 不允许空键空值 ​

(3)插入和取出顺序一致:LinkedHashMap ​

(4)配置文件操作:Properties ​

关系对比 ​

ArrayList 和 Vector ​

底层结构版本线程安全(同步)效率扩容机制
ArrayList可变数组jdk1.2不安全, 效率高1. 如果是无参构造器, 默认为 10, 满后, 就按 1.5 倍扩容
2. 如果构造器指定大小, 则每次按原先的1.5 倍扩容
Vector可变数组 Object[]jdk1.0安全, 效率不高1. 如果是无参构造器, 默认为 10, 满后, 就按 2 倍扩容
2. 如果构造器指定大小, 则每次按原先的2 倍扩容

ArrayList 和 LinkedList ​

底层结构底层实现查找的效率
ArrayList(适用查找多)可变数组较低
LinkedList(适用增删多)双向链表较高,通过链表添加

HashMap 和 Hashtable ​

类型版本线程安全(同步)效率允许 null 键 null 值
HashMap1.2不安全高可以
Hashtable1.0安全低不可以