回答:
在 Java 中,Collection
和 Collections
仅一字之差,但它们有本质区别:
对比维度 | Collection | Collections |
---|---|---|
类型 | 接口(Interface) | 工具类(Utility Class) |
所属包 | java.util.Collection | java.util.Collections |
作用 | 定义 了 Java 集合框架的 根接口,用于存储一组对象 | 提供 了操作集合(如排序、同步、查找等)的静态方法 |
子接口 | List 、Set 、Queue | 无子接口 |
常用方法 | add() 、remove() 、size() 、contains() 等 | sort() 、reverse() 、synchronizedList() 、max() 、min() 等 |
示例 | List<String> list = new ArrayList<>(); | Collections.sort(list); |
1. Collection(接口)
-
Collection
是 Java 集合框架的根接口,其下有三个主要子接口:-
List
(如ArrayList
、LinkedList
) -
Set
(如HashSet
、TreeSet
) -
Queue
(如PriorityQueue
、LinkedList
)
-
-
Collection
接口主要用于 存储和管理多个元素。
示例代码
import java.util.*;public class CollectionExample {public static void main(String[] args) {Collection<String> list = new ArrayList<>(); // List 也是 Collection 的子类list.add("Java");list.add("Python");list.add("C++");System.out.println("Collection 内容:" + list);}
}
输出
Collection 内容:[Java, Python, C++]
2. Collections(工具类)
-
Collections
是 Java 提供的 工具类,包含了一系列 静态方法,用于操作Collection
及其子类对象,如:-
排序:
Collections.sort(list)
-
查找:
Collections.binarySearch(list, "Java")
-
同步:
Collections.synchronizedList(new ArrayList<>())
-
最值:
Collections.max(list)
,Collections.min(list)
-
示例代码
import java.util.*;public class CollectionsExample {public static void main(String[] args) {List<Integer> numbers = new ArrayList<>(Arrays.asList(3, 1, 4, 1, 5, 9));Collections.sort(numbers); // 排序System.out.println("排序后的列表:" + numbers);int max = Collections.max(numbers);int min = Collections.min(numbers);System.out.println("最大值:" + max + ",最小值:" + min);}
}
输出:
排序后的列表:[1, 1, 3, 4, 5, 9]
最大值:9,最小值:1
3. 面试官可能的追问
(1) 为什么 Collection 是接口,而 Collections 是工具类?
-
Collection
是 Java 集合框架的基础,定义了统一的 集合操作 规范。 -
Collections
只是 提供静态工具方法,不需要创建实例,因此设计为 工具类。
(2) 你用过哪些 Collections 工具类的方法?
-
sort(list)
: 排序 -
reverse(list)
: 反转顺序 -
max(list), min(list)
: 获取最大/最小值 -
synchronizedList(new ArrayList<>())
: 获取线程安全的List
-
unmodifiableList(list)
: 获取不可修改的List
(3) Collections 提供的线程安全方法是如何实现的?
-
Collections.synchronizedList(new ArrayList<>())
返回的集合 使用 synchronized 关键字 进行方法同步,使其变为线程安全集合。
(4) 如何创建一个不可变集合?
-
方法 1(
Collections.unmodifiableList()
)
List<String> list = new ArrayList<>(Arrays.asList("A", "B", "C"));
List<String> unmodifiableList = Collections.unmodifiableList(list);
unmodifiableList.add("D"); // 运行时会抛出 UnsupportedOperationException
- 方法 2(
List.of()
)
List<String> list = List.of("A", "B", "C"); // 直接创建不可变集合
4. 总结
关键点 | Collection | Collections |
---|---|---|
本质 | 接口 | 工具类 |
作用 | 定义集合框架的根接口 | 提供操作集合的静态工具方法 |
包 | java.util.Collection | java.util.Collections |
常见方法 | add() 、remove() 、size() | sort() 、reverse() 、synchronizedList() |
示例 | List<String> list = new ArrayList<>(); | Collections.sort(list); |
面试技巧:
-
强调
Collection
是接口,Collections
是工具类,两者作用完全不同。 -
列举
Collections
的常用方法,尤其是 排序、同步、不可变集合 相关方法。 -
扩展多线程相关问题,如
Collections.synchronizedList()
的作用。
如果觉得这篇博客对你有帮助,记得点赞 ⭐、收藏 📌、关注 🚀!