Java内置工具类
Java内置工具类及常用类
一、java.util.Objects
方法
compare(T a, T b, Comparator<? super T> c)
按照自定义的比较器比较两个对象的大小。
两对象指向同一地址,相等返回0,
否则,按照自定义的比较器去比较。
- 源码
public static <T> int compare(T a, T b, Comparator<? super T> c) {
return (a == b) ? 0 : c.compare(a, b);
}
- 举例
//比较字符串长度
int res = Objects.compare("1234", "132", new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return o1.length() - o2.length();
}
});
System.out.println(res);//1
equals(Object a, Object b)
比较两个对象是否相等。
两个对象指向同一地址直接返回true,
否则对a判空,然后调用a的equals方法。
- 源码
public static boolean equals(Object a, Object b) {
return (a == b) || (a != null && a.equals(b));
}
isNull(Object obj)
判空
- 源码
public static boolean isNull(Object obj) {
return obj == null;
}
nonNull(Object obj)
判断非空
- 源码
public static boolean nonNull(Object obj) {
return obj != null;
}
Objects中的方法非常简单,对判空、比较等常用语句进行了简单封装。
二、java.lang.Math
方法
该类提供了许多方法的重载,有double、int、long。
abs(double a)
计算绝对值
- 源码
public static double abs(double a) {
return (a <= 0.0D) ? 0.0D - a : a;
}
- 举例
System.out.println(Math.abs(-1));//1
floor(double a)
向下取整
- 举例
System.out.println(Math.floor(-1.5));//-2
System.out.println(Math.floor(1.5));//1
ceil(double a)
向上取整
- 举例
System.out.println(Math.ceil(-1.5));//-1
System.out.println(Math.ceil(1.5));//2
round(double a)
四舍五入
- 举例
System.out.println(Math.round(-1.6));//-2
System.out.println(Math.round(1.6));//2
System.out.println(Math.round(-1.4));//-1
System.out.println(Math.round(1.4));//1
max(double a, double b)
取两数最大
- 源码
public static int max(int a, int b) {
return (a >= b) ? a : b;
}
min(double a, double b)
取两数最小
public static int min(int a, int b) {
return (a <= b) ? a : b;
}
pow(double a, double b)
a的b次方
- 举例
System.out.println(Math.pow(2,4));//16.0
sqrt(double a)
a的平方根
- 举例
System.out.println(Math.sqrt(4));//2.0
cbrt(double a)
a的立方根
System.out.println(Math.cbrt(8));//2.0
random()
返回一个随机的[0.0,1.0)的随机数
- 举例
//返回[1-10]的随机数
System.out.println((int) (Math.random() * 10 + 1));
三、java.util.Arrays
方法
asList(T… a)
将数组中的元素转化成List。
- 源码
public static <T> List<T> asList(T... a) {
return new ArrayList<>(a);
}
注意:此时的ArrayList并不是java.util.List,而是Arrays的内部类java.util Arrays.ArrayList。
如果直接使用asList可以返回一个List对象,但是并不能使用List中的方法
public class Test {
public static void main(String[] args) {
List<String> list = Arrays.asList("1","2","3");
list.add("5");//java.lang.UnsupportedOperationException
}
}
可以将asList返回的List装进java.util.List中使用
public class Test {
public static void main(String[] args) {
List<String> list = new ArrayList<>(Arrays.asList("1","2","3"));
list.add("5");
}
}
注意:使用asList,参数是基本数据类型的数组时,并不会将数组转化为基本数据类型的List,而是转换成基本数据类型数组的List,jvm会将基本数据类型数组看成一个引用数据类型,使用引用数据类型就不会这样
ArrayList<int[]> ints = new ArrayList<>(Arrays.asList(new int[]{1, 2, 3}));
ArrayList<Integer> integers = new ArrayList<>(Arrays.asList(new Integer[]{1, 2, 3}));
binarySearch(int[] a, intkey)
二分查找,返回指定元素的索引
copyOf(int[] original, int newLength)
将原数组复制到一个指定长度的新数组
- 举例
int[] a = Arrays.copyOf(new int[]{1,2,3},8);
System.out.println(Arrays.toString(a));//[1, 2, 3, 0, 0, 0, 0, 0]
copyOfRange(int[] original, int from, int to)
将指定范围的数组元素复制到新数组
int[] b = Arrays.copyOfRange(new int[]{1,2,3},0,2);
System.out.println(Arrays.toString(b));//[1, 2]
equals(int[] a, int[] a2)
比较两个数组是否彼此对应相等
- 举例
Arrays.equals(new int[]{1,2,3},new int[]{3,2,1});//false
Arrays.equals(new int[]{1,2,3},new int[]{1,2,3});//true
fill(int[] a, int val)
将val填充到a所有元素
int[] c = new int[5];
Arrays.fill(c,4);
System.out.println(Arrays.toString(c));//[4, 4, 4, 4, 4]
fill(int[] a, int fromIndex, int toIndex, int val)
将val填充到a指定范围的元素
int[] c = new int[5];
Arrays.fill(c,1,3,4);
System.out.println(Arrays.toString(c));//[0, 4, 4, 0, 0]
sort(int[] a)
升序排序
int[] d = {1,2,5,6,7,4};
Arrays.sort(d);
System.out.println(Arrays.toString(d));//[1, 2, 4, 5, 6, 7]
toString(int[] a)
字符串打印数组元素
四、java.lang.System
方法
arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
从源数组的指定位置复制到目标数组的指定位置,并不会改变目标数组的长度
//原数组,起始位置,目标数组,起始位置,长度
int[] a = {1,2,0,0,0,6,7};
int[] b = {3,4,5};
System.arraycopy(b,0,a,2,3);
System.out.println(Arrays.toString(a));//[1, 2, 3, 4, 5, 6, 7]
currentTimeMillis()
获取当前时间的毫秒值
System.out.println(System.currentTimeMillis());//1631889387611
九、java.util.Collections
方法
addAll(Collection<? super T> c, T… elements)
将所有指定元素加入集合
List<String> list = new ArrayList<>();
Collections.addAll(list,"a","b","c");
System.out.println(list);//[a, b, c]
binarySearch(List<? extends Comparable<? super T>> list, T key)
二分查找集合中的元素
copy(List<? super T> dest, List<? extends T> src)
将集合复制到另一个集合中
reverse(List<?> list)
反转集合中的元素
List<String> list = new ArrayList<>();
Collections.addAll(list,"a","b","c");
Collections.reverse(list);
System.out.println(list);//[c, b, a]
shuffle(List<?> list)
打乱顺序
List<String> list = new ArrayList<>();
Collections.addAll(list,"a","b","c");
Collections.shuffle(list);
System.out.println(list);//[c, a, b]
sort(List list)
升序排序
List<String> list = new ArrayList<>();
Collections.addAll(list,"a","b","c");
Collections.shuffle(list);
Collections.sort(list);
System.out.println(list);//[a, b, c]
swap(List<?> list, int i, int j)
交换集合中两元素的位置
List<String> list = new ArrayList<>();
Collections.addAll(list,"a","b","c");
Collections.swap(list,1,2);
System.out.println(list);//[a, c, b]
总结
今天整理了下Java内置的工具类方法,其中Collections针对集合;Arrays针对数组;Objects是对对象的简单封装;Math是针对数学运算。