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安全不可以