这个类在日常的开发中,还是非常常用的。今天就总结一下Arrays工具类的常用方法。最常用的就是asList,sort,toStream,equals,copyOf了。另外可以深入学习下Arrays的排序算法,这个还是非常有用的。
这个类在日常的开发中,还是非常常用的。今天就总结一下Arrays工具类的常用方法。最常用的就是asList,sort,toStream,equals,copyOf了。另外可以深入学习下Arrays的排序算法,这个还是非常有用的。
所有的方法都是在下面的类中进行测试的:1
2
3
4
5public class ArraysTest {
String[] array = new String[]{"a","c","2","1","b"};
Integer[] ints = new Integer[]{5,1,4,3,2};
...
}
asList
这个方法可以把数组转换成List,List提供了很多的操作方法,更便于使用。1
2
3
4
public void test1(){
List<String> lists = Arrays.asList(array);
}
sort排序和parallelSort并行排序
sort比较常用了,根据元素按照自然排序规则排序,也可以设置排序元素的起始位置。1
2
3
4
5
6
7
8
9
public void sort(){
/* Arrays.sort(array);
for(String str : array){
System.out.println(str);
}*/
Arrays.sort(array,2,5);
System.out.println(Arrays.deepToString(array));//[a, c, 1, 2, b]
}
parallelSort则采用并行的排序算法排序.但是我自己测试,可能数据量太小,速度上并没有明显的变化。
binarySearch
查找目标元素所在的位置,注意需要先进行排序。1
2
3
4
5
6
7
public void binarySearch(){
//binarySearch需要保证是排好序的
System.out.println(Arrays.binarySearch(array,"c"));//-6
Arrays.sort(array);
System.out.println(Arrays.binarySearch(array,"c"));//4
}
copyOf
拷贝数组,第一种用法,如果目标长度不够,会使用0进行补位。第二种用法,支持拷贝目标起始位置到结束为止的数组。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public void copyOf(){
//如果位数不够,需要补位
Integer[] result = Arrays.copyOf(ints,10);
for(int i : result){
System.out.println(i);
}
System.out.println("----------------------------------------->");
//如果位数够,就取最小的数组
result = Arrays.copyOf(ints,3);
for(int i : result){
System.out.println(i);
}
System.out.println("----------------------------------------->");
//
result = Arrays.copyOfRange(ints,2,4);
for(int i : result){
System.out.println(i);
}
}
deepEquals深度比较、deepHashCode生成hashcode、deepToString深度打印
这几个方法基本都是采用递归的写法使用。1
2
3
4
5
6
7
8
9
10
11
public void deepTest(){
String[] array2 = new String[]{"a","c","2","1","b"};
System.out.println(Arrays.deepEquals(array,array2));//深度比较两个数组是否相同
System.out.println(Arrays.deepHashCode(array));
System.out.println(Arrays.deepHashCode(array2));//如果两个数组deepEquals,那么他们的hashcode一定相同
//格式化输出数组
System.out.println(Arrays.deepToString(array));
}
equals比较
对比两个数组是否相等1
2
3
4
5
6
7
8
9
10
public void equals(){
String[] array2 = new String[]{"a","c","2","1","b"};
//1 对比引用是否相同
//2 对比是否存在null
//3 对比长度是否相同
//4 挨个元素对比
System.out.println(Arrays.equals(array,array2));
}
fill
基于目标元素填充数组
1 |
|
toString
打印数组元素
1 |
|
toStream
把数组转换成stream,然后可以使用java8的stream特性了。
1 |
|
parallelPrefix
这个有点像spark的reduceByKey,即根据传入的方法一次计算:
1 |
|
parallelSetAll
这个方法相当于stream.map会挨个元素遍历执行方法
1 |
|
setAll
这个方法与上面类似,只不过不是并行的
1 |
|