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 = 操作集合的工具类
相关推荐
咖啡八杯10 小时前
GoF设计模式——策略模式
java·后端·spring·设计模式
用户1285261160218 小时前
我把祖传Java项目重构后,接口响应从3s砍到了200ms,只改了这几行代码
java
Linsk18 小时前
组件 = 模板 + 业务逻辑
java·前端·vue.js
星沉远浦19 小时前
用Gemini高效解决Java代码报错难以定位的问题
java
用户298698530141 天前
Word 文档字符级格式化:Java 实现方案详解
java·后端
笨鸟飞不快1 天前
从单个服务到集群:一次完整的性能排查复盘
java·前端
荣码1 天前
用Streamlit给AI应用套个界面,10行代码出Web页面
java·python
SamDeepThinking1 天前
Java微服务练习方式
java·后端·微服务
朦胧之1 天前
AI 编程-老项目改造篇
java·前端·后端
程序猿大帅2 天前
别再只当调包侠了:用 Spring AI 落地 Function Calling,我被大模型硬生生砸出了三个大坑
java