本文首发于cartoon的博客
转载请注明出处:https://cartoonyu.github.io/cartoon-blog/post/java/collections/
推荐一篇不错的博文:https://gitee.com/SnailClimb/JavaGuide/blob/master/docs/java/Basis/Arrays,CollectionsCommonMethods.md
前言
就在刚刚面试,被问到了Collections工具类有什么功能,我懵了,很少涉及到Collections这个工具类,只答了对集合元素的操作以及将线程不同步的集合类转换成线程同步,下定决心复盘一下。
正文
Collections工具类是java.util包中的一个工具类,主要功能是对集合及其元素进行操作。虽然被问的有点懵,在结束查看官方文档时发现其实可以分成以下几大部分
对集合本体的操作
线程同步集合的包装
- 特征
- 方法名为synchronizedXxx
- 适用范围
- List
- Collection
- Set
- Map
- 缺点
- 每次读写都要加锁,锁的层级为对象,不利于多线程的同时操作
- 在使用Iterator的遍历时修改元素ConcurrentModificationException
- 建议使用java.util.concurrent的集合线程同步类
返回不可变集合
特征
- 方法名为emptyXxx(空集合)/singletonXxx(包含传入元素的集合)/unmodifiableXxx(包含传入集合元素的集合)
适用范围
emptyXxx
- Set
- List
- Map
- Iterator
- Enumeration
singletonXxx
- Set
- List
- Map
unmodifiableXxx
Map
List
Set
返回指定集的动态类型安全视图
- 特征
- 方法名为checkedXxx
- 适用范围
- List
- Map
- Queue
- Set
- Collection
集合间的转换
特征
asLifoQueue(将传入的Deque转换成Queue)
list(将传入的Enumeration转换成ArrayList)
newSetFromMap(根据传入的空Map返回Set)
nCopies(根据传入的n返回含n个副本的List)
集合内元素的操作
添加元素到集合中
- 特征
- addAll
- copy(将源集合元素复制到目标集合中)
- 适用范围
- addAll
- Collection
- copy
- List
- addAll
查找元素
- 特征
- binarySearch(二分查找特定元素)
- frequency(查找元素出现次数)
- indexOfSubList(返回目标list在源list的开始位置)
- subIndexOfSubList(返回目标list在源list的结束位置)
- shuffle(返回随机索引元素)
- 适用范围
- binarySearch
- List
- frequency
- Collection
- shuffle
- List
- binarySearch
替换
- 特征
- fill(替换集合所有元素)
- replaceAll(替换特定的值)
- 适用范围
- fill
- List
- replaceAll
- List
- fill
改变元素位置
- 特征
- sort(排序)
- swap
- rotate(反转)
- reverse
- 适用范围
- List
对比元素
- 特征
- min/max(寻找最大/小元素)
- disJoint(判断两个集合元素是否全不同)
- 适用范围
- Collection
总结
Collections工具类能对各接口以及实现类实现多种操作
- 集合类级操作
- 返回线程安全集合
- 返回不可变集合
- 返回安全视图
- 集合间的转换
- 涉及到内部元素的操作
- 添加元素到集合中
- 查找特定元素
- 替换元素
- 改变元素位置
- 元素间的比较
虽然有些方法不如其他包内的工具类好用,但是总体来说功能还是非常强大的。
这篇文章算是对官方文档的总结和归纳,也加以自己的思考,也是面试题之一,希望自己能在之后不会再吃这道题的亏。