带你了解Collections和Collection!!!

一、核心区别

Collection:是接口,Java 集合框架的根接口之一 ,定义了 List、Set、Queue 等单值集合的通用规范(存、取、删、遍历等)

Collections:是工具类,全是静态方法(意味着只需要调用即可,不需要创建对象),专门用来对 Collection 集合进行排序、查找、同步、不可变等便捷操作。

形象一点说:Collection是说明书,规定集合该有哪些功能;Collections是工具,给集合提供操作

可以用一张表来清晰的看出区别:

维度 Collection Collections
类型 接口(interface) 工具类(class)
继承 / 实现 继承 Iterable 接口 继承 Object,无实现集合接口
作用 定义 List/Set/Queue 的通用规范 提供集合操作的静态工具方法
实例化 不能实例化,需用实现类(ArrayList/HashSet) 不能实例化(构造私有),直接调用静态方法
使用方式 实现类对象调用方法 类名直接调用静态方法
核心场景 定义集合标准、面向接口编程 排序、查找、同步、不可变等便捷操作
所属体系 Java 集合框架的顶层接口 集合框架的工具类,独立于接口体系

二、Collection接口

1.继承体系

java.util.Collection 是 Java 集合框架的顶层父接口 ,继承了 Iterable 接口(意味着所有 Collection 集合都支持迭代遍历)。

它是List、Set、Queue 的父接口,但是需要注意的是Map不属于Collection,Map是双值集合(存储键值对),独立于Collection体系

完整继承结构如下:

复制代码
Iterable(迭代器接口)
  ↓
Collection(集合顶层接口)
  ├─ List(有序、可重复、索引访问)
  ├─ Set(无序、不可重复)
  └─ Queue(队列、先进先出)

2.核心作用

Collection 定义了所有单值集合必须实现的通用方法,统一了集合的操作规范。无论你用 ArrayList、HashSet 还是 LinkedList,都能通过 Collection 接口调用通用方法,实现面向接口编程。

3.常用方法

Collection没有提供实现类,而是定义了以下核心方法,由List、Set、Queue自行实现,常用实现类有:

  • List:ArrayList、LinkedList、Vector

  • Set:HashSet、LinkedHashSet、TreeSet

  • Queue:LinkedList、PriorityQueue

    // 添加元素
    boolean add(E e);
    // 批量添加
    boolean addAll(Collection<? extends E> c);
    // 删除指定元素
    boolean remove(Object o);
    // 判断是否包含
    boolean contains(Object o);
    // 清空集合
    void clear();
    // 获取元素个数
    int size();
    // 判断是否为空
    boolean isEmpty();
    // 转数组
    Object[] toArray();
    // 迭代器(遍历集合)
    Iterator<E> iterator();

4.代码示例

Collection引用指向ArrayList实现类:

java 复制代码
import java.util.ArrayList;
import java.util.Collection;

public class CollectionDemo {
    public static void main(String[] args) {
        Collection<String> collection = new ArrayList<>();

        // 1. 添加元素
        collection.add("Java");
        collection.add("Python");
        collection.add("C++");
        System.out.println("添加后:" + collection); // [Java, Python, C++]

        // 2. 判断元素是否存在
        System.out.println("包含Java?" + collection.contains("Java")); // true

        // 3. 获取集合大小
        System.out.println("集合大小:" + collection.size()); // 3

        // 4. 移除元素
        collection.remove("C++");
        System.out.println("移除后:" + collection); // [Java, Python]

        // 5. 遍历集合(迭代器)
        for (String s : collection) {
            System.out.println("遍历元素:" + s);
        }

        // 6. 清空集合
        collection.clear();
        System.out.println("清空后是否为空:" + collection.isEmpty()); // true
    }
}

三、Collections工具类

1.定义与特点

java.util.Collections 是 Java 提供的集合工具类 ,构造方法私有(private Collections(){}),不能实例化 ,所有方法都是静态方法,直接通过类名调用。

它的核心作用:简化集合操作,提供原生集合没有的高级功能(排序、反转、查找、同步、不可变等)。

2.常用静态方法

(1)排序

这里的comparator之前有提到过哦!在lambda那篇文章里

java 复制代码
// 自然排序(元素必须实现Comparable)
Collections.sort(list);
// 自定义排序(传入Comparator)
Collections.sort(list, Comparator.comparing(...) );

(2)查找

java 复制代码
// 二分查找(必须先排序)
int index = Collections.binarySearch(list, key);
List<Integer> list = new ArrayList<>();
//获取最大值
Integer max = Collections.max(list); 
//获取最小值
Integer min = Collections.min(list);

(3)修改

java 复制代码
// 反转集合
Collections.reverse(list);
// 随机打乱
Collections.shuffle(list);
// 替换所有元素
Collections.fill(list, obj);
// 交换两个索引位置
Collections.swap(list, i, j);

(4)线程安全转换

Collection<T> synchronizedCollection(Collection<T> c):将非线程安全集合转为线程安全集合

List<T> synchronizedList(List<T> list):线程安全 List

Set<T> synchronizedSet(Set<T> s):线程安全 Set

3.代码示例

java 复制代码
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class CollectionsDemo {
    public static void main(String[] args) {
        List<Integer> list = new ArrayList<>();
        list.add(30);
        list.add(10);
        list.add(20);
        list.add(50);
        System.out.println("原始集合:" + list); // [30, 10, 20, 50]

        // 1. 升序排序
        Collections.sort(list);
        System.out.println("排序后:" + list); // [10, 20, 30, 50]

        // 2. 反转集合
        Collections.reverse(list);
        System.out.println("反转后:" + list); // [50, 30, 20, 10]

        // 3. 获取最大/最小值
        System.out.println("最大值:" + Collections.max(list)); // 50
        System.out.println("最小值:" + Collections.min(list)); // 10

        // 4. 二分查找(需先排序)
        Collections.sort(list);
        System.out.println("查找20的索引:" + Collections.binarySearch(list, 20)); // 1

        // 5. 随机打乱
        Collections.shuffle(list);
        System.out.println("随机打乱后:" + list);

        // 6. 转为不可变集合(增删抛 UnsupportedOperationException)
        List<Integer> unmodifiableList = Collections.unmodifiableList(list);
        // unmodifiableList.add(60); // 运行报错

        // 7. 转为线程安全集合
        List<Integer> syncList = Collections.synchronizedList(new ArrayList<>());
    }
}

四、常见误区

误区 1:把 Collections 当作集合使用:

错误:Collections list = new ArrayList();

正确:Collection list = new ArrayList();

误区 2:用 Collection 做排序 / 查找

Collection 接口没有排序方法 ,排序必须用 Collections.sort()

误区 3:认为 Collections 是 Collection 的实现类

二者无继承关系,Collections 是独立的工具类,和 Collection 接口没有父子关系。

相关推荐
直奔標竿5 小时前
Java开发者AI转型第二十课!Spring AI MCP 双向实战:客户端与服务端手把手落地
java·开发语言·人工智能·spring boot·后端·spring
天码-行空5 小时前
深入拆解 Tomcat 架构:高层组件与启动流程设计
java·架构·tomcat
天码-行空5 小时前
深入拆解 Tomcat 架构:一键启停与生命周期设计
java·架构·tomcat
c++之路5 小时前
C++ 高频易错点
java·jvm·c++
java1234_小锋5 小时前
Spring AI 2.0 开发Java Agent智能体 - 新建 HelloWorld 项目
java·人工智能·spring·spring ai
yue2004035 小时前
Spring IoC 与 DI 核心概念与原理笔记
java·笔记·spring
wuminyu5 小时前
专家视角看Java多态性的底层基石vtable(虚函数表)构建过程解析
java·linux·c语言·jvm·c++
phltxy5 小时前
Spring Cloud 服务注册与发现:Eureka 从原理到实战
java·spring cloud·eureka