集合的总结
一、结构关系回顾
Collection 接口
Map 接口
关于线程安全问题
| 类/接口 | 线程安全 |
|---|---|
| ArrayList | 否 |
| Vector | 是 |
| LinkedList | 否 |
| HashSet | 否 |
| LinkedHashSet | 否 |
| TreeSet | 否 |
| HashMap | 否 |
| LinkedHashMap | 否 |
| Hashtable | 是 |
| Properties | 是 |
| TreeMap | 否 |
总结
| 类/接口 | 所属接口 | 底层实现 | 主要特点 |
|---|---|---|---|
| Collection | 接口 | 实现了 Iterator 接口 | 所有集合的顶层父接口 |
| List | 接口 | 实现了 Collection 接口 | 有序、可重复元素 |
| ArrayList | List | 动态数组 | 查询快、增删慢 |
| Vector | List | 动态数组 | 查询快、效率低 |
| LinkedList | List | 双向链表 | 增删快、查询慢、可做队列 |
| Set | 接口 | 实现了 Collection 接口 | 无序、不重复元素 |
| HashSet | Set | HashMap | 查询快、不保证顺序 |
| LinkedHashSet | Set | LinkedHashMap | 有序(插入顺序) |
| TreeSet | Set | TreeMap(红黑树) | 可排序,有序 |
| Map | 接口 | 实现了 Collection 接口 | 键值对集合,键唯一 |
| HashMap | Map | 数组+单链表+红黑树 | 查询快、不保证顺序 |
| LinkedHashMap | Map | HashMap + 双向链表 | 有序(插入顺序) |
| Hashtable | Map | 哈希表 | 效率低 |
| Properties | Map | 继承了 Hashtable | 属性配置专用,键值为字符串 |
| TreeMap | Map | 红黑树(Entry 节点) | =可排序==,按 key 有序 |
二、关于集合的选择问题
(1) 先判断存储的类型(一组对象【单列】或一组键值对【双列】)
(2) 一组对象【单列】:Collection
(3) 一组键值对【双列】:Map
三、对比关系一览表
ArrayList 和 Vector 的区别
| 底层结构 | 版本 | 线程安全(同步) | 效率 | 扩容机制 |
|---|---|---|---|---|
| ArrayList | 可变数组 | jdk1.2 | 不安全, 效率高 | 如果有参数构造 1.5 倍, 如果是无参 1. 第一次 x 10 2. 从第二次开始 x 1.5 倍 |
| Vector | 可变数组 Object[] | jdk1.0 | 安全, 效率不高 | 1. 如果是无参, 默认为 10, 满后, 就按 2 倍扩容 2. 如果指定大小, 则每次直接按 2 倍扩容 |
ArrayList 和 LinkedList 的比较
| 底层结构 | 增删的效率 | 查找的效率 |
|---|---|---|
| ArrayList | 可变数组 | 较低 |
| LinkedList | 双向链表 | 较高,通过链表添加 |
HashMap 和 Hashtable 的对比
| 类型 | 版本 | 线程安全(同步) | 效率 | 允许 null 键 null 值 |
|---|---|---|---|---|
| HashMap | 1.2 | 不安全 | 高 | 可以 |
| Hashtable | 1.0 | 安全 | 低 | 不可以 |
1292

被折叠的 条评论
为什么被折叠?



