贝利信息

Java里Collection和Collections有什么区别_Java接口与工具类说明

日期:2026-01-06 00:00 / 作者:P粉602998670
Collection是集合顶层接口,定义增删查遍历等行为;Collections是工具类,提供操作集合的静态方法。二者拼写相近但类型不同:前者为interface,后者为final class。

Collection 是接口,不是类

它定义了集合该“能干什么”,比如 add()remove()contains()iterator() 这些方法——所有真正存数据的集合(如 ArrayListHashSetLinkedList)都得实现它。你不能写 new Collection(),编译直接报错:Collection is abstract; cannot be instantiated

Collections 是工具类,全是静态方法

它不存数据,也不被继承,就一个纯工具箱,所有方法都是 static,直接用类名调:Collections.sort(list)。它不提供新集合类型,而是帮你“操作已有集合”或“包装出特殊行为”。

名字差一个 s,但根本不在同一维度

就像 StringStringUtils 的关系:Collection 是“集合这个概念本身”,Collections 是“怎么摆弄集合”的说明书。它们既不是父子类,也不互相依赖——你可以完全不用 Collections 写业务逻辑,但只要用了 ArrayList,你就已经在用 Collection 接口了(因为 ArrayList implements List extends Collection)。

常见踩坑场景

最典型的混淆是以为 Collections 能“创建集合”,结果写出这种代码:

Collection c = Collections.emp

tyList(); // ✅ 返回的是 Collection 实例(其实是空的不可变 List) List l = Collections.emptyList(); // ✅ 编译通过(多态赋值) Set s = Collections.emptySet(); // ✅ 同理 Collection bad = new Collections(); // ❌ 编译错误:Collections 是 final 类,无 public 构造器
别把 Collection 当容器用,也别指望 Collections 存数据——一个定契约,一个给扳手,各干各的活。真正在代码里频繁出现的,其实是它的实现类(ArrayListHashMap),而不是这两个名字。