Java集合工具类
0.源码下载
此处我们使用openJDK源码,下载网址是http://hg.openjdk.java.net/
老司机带路教程:https://adoptopenjdk.gitbooks.io/adoptopenjdk-getting-started-kit/en/
1.关键字理解
static和final
方法和变量被static和final修饰,
保证方法和变量不需要初始化就可以使用,变量不可修改、方法不可被覆写,保证了方法内部稳定性。
try、catch、finally
try {
System.out.println("start");
throw new Exception("111");
} catch (Exception e) {
e.printStackTrace();
System.out.println("222");
throw new Exception("444");
} finally {
System.out.println("333");
}
执行顺序是 1234 当catch中发生异常时会在finally执行完毕后抛出异常。
default 关键字
用于接口方法签名前,给接口方法提供默认实现。
volatile关键字
确保了修改可见性
2.集合类常见方法
工具类要点:
(1)构造器私有,工具类使用时无需构造对象。
(2)方法被staticl修饰,保证方法可直接使用,final修饰常量,保证不可变性。
(3)当要对共享变量做修改时,需要加锁处理线程安全问题。
(4)内部辅助类使用静态内部类。
Arrays 工具类
面向数组使用,主要包含以下方法:
Arrays
--sort 对数组进行排序,底层是DualPivotQuicksort双轴快排。
--parallelSort 并行排序,但只有超大数组才会使用并行处理。
--parallelPrefix 计算累计值,[2,1,2,5]->[2,3,5,7,12]
--spliterator
--binarySearch 二分搜索
--equals 判断两个数组是否相等,判空,判长,判定元素。
--fill 使用指定值填充数组,一个for循环搞定。
--copyOf 拷贝数组 底层使用native方法
--asList 将数组转换为List
--hashCode 生成数组的哈希值
--toString 将数组转换为字符串
--stream 将数组转换为流
其中并行排序的原理是判断数组大小,小于阀值1 << 13 = 8192
或者并行级别为1,则走双轴快排;否则走并行排序。
Collections 工具类
面向集合类使用,
Collections
--sort 使用的是List自身的sort方法
--binarySearch 二分查找,底层有基于索引的二分查找和基于迭代器的二分查找
--reverse 反转list
--swap 替换元素
--fill 使用指定元素填充列表
--copy 复制列表
--max 返回最大值
--min 返回最小值
--synchronizedList 创建各种同步集合类,内部操作都是加了synchronized关键字
--unmodifiableList 创建不可修改的集合类
如下泛型规定了必须要实现的接口以及继承的类型
<T extends Object & Comparable<? super T>> T
Objects 工具类
Objects中的方法少了很多,主要有equals、hashCode、hash 等。
``