Collections 工具类常用方法
面试官问:"Collections 和 Collection 有什么区别?"
候选人小周答:"Collection 是接口,Collections 是工具类。"
面试官追问:"那你用过 Collections 的哪些方法?"
小周说:"呃... Collections.sort() 排序... Collections.reverse() 反转..."
面试官继续问:"二分查找用什么方法?对线程安全集合呢?"
小周彻底答不上来了。
【面试官心理】 这道题考查的是候选人对 Java 标准库的掌握程度。Collections 是开发中离不开的工具类,但很多人只用过排序和反转,其他方法都不熟悉。
一、Collections vs Collection
二、排序与查找 🔴
2.1 排序 sort()
2.2 二分查找 binarySearch()(必须先排序!)
2.3 反转 reverse()
2.4 洗牌 shuffle()
三、批量操作 🔴
3.1 批量赋值 fill()
3.2 批量复制 copy()
3.3 批量交换 swap()
四、极值与统计 🟡
五、线程安全封装 🔴
5.1 同步集合 synchronizedXXX()
⚠️
Collections.synchronizedList() 返回的集合在遍历时必须手动加锁:
5.2 不可变集合
5.3 单元素集合
六、方法速查表
七、面试官追问 🔴
面试官:"Collections.sort() 和 Arrays.sort() 有什么区别?"
标准回答:
Collections.sort()操作ListArrays.sort()操作数组- 底层最终都调用了
TimSort.sort()或Dual-Pivot Quicksort
面试官追问:"Collections.binarySearch() 查找一个没排序的 list 会怎样?"
标准回答:结果是未定义的,可能找到错误的位置或者返回负数。