带你了解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 接口没有父子关系。

相关推荐
爱笑的源码基地14 小时前
小微企业ERP源码,采用SpringBoot+Vue+ElementUI+UniAPP技术架构,支持二次开发及商用授权
java·源码·二次开发·erp·源代码·mrp生产计划
happymaker062615 小时前
Spring学习日记——DAY03(yml文件)
java·spring boot·spring
凯瑟琳.奥古斯特15 小时前
操作系统核心结构解析
java·开发语言·c++·python·职场和发展
ZC跨境爬虫15 小时前
跟着 MDN 学CSS day_2:(连接样式表与选择器的实战艺术)
java·前端·css·ui·html·媒体
敖正炀15 小时前
AQS-钩子方法
java
郭郭的柳柳在学FPGA15 小时前
千兆以太网@——帧格式
java·开发语言·网络
真恋寄语枫秋15 小时前
【Java零基础入门20】Java Stream流超全详解:中间操作、终结操作、集合数据处理
java
段ヤシ.15 小时前
回顾Java知识点,面试题汇总Day10(持续更新)
java·开发语言·spring
Dicky-_-zhang15 小时前
Elasticsearch聚合查询优化实战
java·jvm