Collection(单列集合)、Map(双列集合),容易搞混的 Collections 工具类。

Collection(单列集合)Map(双列集合) ,以及容易搞混的 Collections 工具类

一、先搞懂三个长得很像的东西

  1. Collection (带 n,单数)→ 顶层接口,单列集合的根。
  2. Map→ 另一套顶层接口,双列集合的根。
  3. 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 是工具类

很多人把 CollectionCollections 搞混:

  • Collection集合接口,是集合本身

  • Collections工具类 ,里面全是静态方法

    java

    运行

    复制代码
    Collections.sort(list);    // 排序
    Collections.shuffle(list); // 打乱
    Collections.max(collection);

不是集合,不能用来存数据。


五、最终结论

  1. CollectionMap 都是 Java 集合框架的一部分
  2. 但它们是两个完全独立的根接口,没有继承关系
  3. Collection = 单列集合(存单个对象)
  4. Map = 双列集合(存 key-value 对)
  5. Collections = 操作集合的工具类
相关推荐
麻瓜code几秒前
【JUC】基础:并发模型、锁机制与 JMM
java
曹牧3 分钟前
SpringBoot: @RequestBody String
java
for_ever_love__12 分钟前
爬虫项目: 获取高分电影的数据总结
开发语言·python·学习
weixin_3077791317 分钟前
C++代码实现MATLAB中的ode23t函数功能
开发语言·c++·算法·matlab
爱划水不秃头的程序员25 分钟前
堆 栈 和常量池的关系是啥 是jvm对他们进行的划分吗
java
周GZ27 分钟前
4个提问,deepseek讲解Java中的线程池
java
LuTshoes27 分钟前
context 上下文工程
java·人工智能·spring·ai
wuminyu27 分钟前
Markword在紧凑对象头上的实现原理剖析
java·linux·c语言·jvm·c++
君顾138 分钟前
24小时自助健身房系统开发实战与完整指南
java·开发语言·健身房
鹿角片ljp1 小时前
LeetCode 78:子集|回溯、选与不选、递归和path快照
java·数据结构·算法