Collection(单列集合) 、Map(双列集合) ,以及容易搞混的 Collections 工具类。
一、先搞懂三个长得很像的东西
Collection(带n,单数)→ 顶层接口,单列集合的根。Map→ 另一套顶层接口,双列集合的根。Collections(带s,复数)→ 工具类,不是集合,用来操作集合(排序、洗牌、同步等)。
二、整体结构(Java 集合框架两大派系)
Java 集合只有两大顶层根接口,互相独立、互不继承:
1. 第一派:Collection 单列集合
存的是:一个个独立的元素 格式:[元素1, 元素2, 元素3]
它下面主要分三大子接口:
(1)List 系列
- 特点:有序、可重复、有索引
- 常用实现类:
ArrayList:底层数组,查询快、增删慢LinkedList:底层链表,增删快、查询慢Vector:线程安全,已淘汰
(2)Set 系列
- 特点:无序、不可重复、无索引
- 常用实现类:
HashSet:哈希表,无序LinkedHashSet:有序TreeSet:可排序
(3)Queue 系列
- 队列,先进先出(FIFO)
Collection 通用方法
java
运行
add(E e) // 添加元素
remove(Object o)// 删除元素
clear() // 清空
size() // 元素个数
isEmpty() // 是否为空
contains(Object o) // 是否包含
iterator() // 迭代器遍历
2. 第二派:Map 双列集合
存的是:一对一对的数据(key-value) 格式:{key1=value1, key2=value2}
- 特点:
- key 必须唯一
- value 可以重复
- key 决定唯一性,value 只是附属
常用实现类
HashMap:最常用,无序,线程不安全LinkedHashMap:有序TreeMap:按 key 排序Hashtable:线程安全,低效ConcurrentHashMap:线程安全,高效
Map 专用方法(和 Collection 完全不同)
java
运行
put(k, v) // 添加/覆盖键值对
get(k) // 根据 key 取 value
remove(k) // 根据 key 删除
containsKey(k) // 是否包含 key
containsValue(v)// 是否包含 value
keySet() // 获取所有 key 的集合
entrySet() // 获取所有键值对
size() // 键值对个数
三、最核心区别(一句话总结)
表格
| 维度 | Collection 单列集合 | Map 双列集合 |
|---|---|---|
| 存储格式 | 单个元素 E |
键值对 K-V |
| 结构 | 一条线 | 两条线绑定 |
| 根接口 | Collection |
Map |
| 遍历方式 | 直接遍历元素 | 遍历 key 或 entry |
| 元素规则 | 可重复(List)/ 不可重复(Set) | key 不可重复 |
| 方法体系 | add/remove/iterator | put/get/keySet |
四、特别提醒:Collections 是工具类
很多人把 Collection 和 Collections 搞混:
-
Collection:集合接口,是集合本身 -
Collections:工具类 ,里面全是静态方法java
运行
Collections.sort(list); // 排序 Collections.shuffle(list); // 打乱 Collections.max(collection);
它不是集合,不能用来存数据。
五、最终结论
Collection和Map都是 Java 集合框架的一部分- 但它们是两个完全独立的根接口,没有继承关系
- Collection = 单列集合(存单个对象)
- Map = 双列集合(存 key-value 对)
- Collections = 操作集合的工具类