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 = 操作集合的工具类
相关推荐
im_AMBER21 小时前
从面试题看JS变量提升
开发语言·前端·javascript·前端框架
故事和你9121 小时前
洛谷-数据结构1-2-二叉树1
开发语言·数据结构·c++·算法·leetcode·动态规划·图论
大橘1 天前
【qml-5.1】qml与c++交互(QML_ELEMENT/QML_SINGLETON)
开发语言·c++·qt·交互·qml
凭君语未可1 天前
从静态代理走向动态代理:理解 JDK 动态代理的本质
java·开发语言
黑风风1 天前
在 Windows 上设置 MAVEN_HOME 环境变量(完整指南)
java·windows·maven
Rsun045511 天前
15、Java 观察者模式从入门到实战
java·python·模板方法模式
珹洺1 天前
Java-Spring入门指南(二十三)俩万字超详细讲解利用IDEA手把手教你实现SSM(Spring + SpringMVC + MyBatis)整合,并构建第一个SSM基础系统
java·spring·intellij-idea
yaaakaaang1 天前
十九、观察者模式
java·观察者模式
小碗羊肉1 天前
【从零开始学Java | 第三十八篇】序列化流(Object Stream)
java·开发语言
亚历克斯神1 天前
Java 23 虚拟线程进阶:深度探索与实战
java·spring·微服务