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 = 操作集合的工具类
相关推荐
buhuizhiyuci2 分钟前
【QT-百日筑基篇】功法有些小成,开始进行打怪升级-QT的实践第一课,创建Hello World的几种方法
开发语言·qt
小雅痞4 分钟前
[Java][Leetcode middle] 73. 矩阵置零
java·leetcode·矩阵
枕星而眠8 分钟前
Linux 共享内存与信号量全解析:原理、实践与避坑指南
linux·c语言·开发语言·后端·ubuntu
Sanri.12 分钟前
JavaScript基础语法6
开发语言·javascript·ecmascript
hhb_61815 分钟前
JavaScript核心技术要点梳理与实战应用案例解析
开发语言·javascript·ecmascript
Mike117.15 分钟前
GBase 8a DBLink 查询的落地边界和排查细节
开发语言·php
代码中介商16 分钟前
C++ STL入门:vector与字符串流详解
开发语言·c++
funnycoffee12316 分钟前
cisco Firepower 4110 9300 FXOS set chassis hostname
java·服务器·数据库
Gofarlic_OMS17 分钟前
CONVERGE CFD许可不够用?自动回收闲置,燃烧仿真随时跑
java·大数据·开发语言·架构·制造
重生之我是Java开发战士22 分钟前
【Java SE】多线程(二):线程安全、synchronized、volatile与wait/notify详解
java·开发语言·安全