java.util.Arrays 类是 JDK 提供的一个工具类,用来处理数组的各种方法。
1.asList():返回由指定数组支持的固定大小列表。
PS:我没怎么用过这个方法,别误人子弟…简单介绍下吧…
public static <T> List<T> asList(T... a) {
return new ArrayList<>(a);
}
Arrays.asList 比较适合那些已经有数组数据或者一些元素,而需要快速构建一个List,只用于读取操作,而不进行添加或删除操作的场景。
public class Arraytest {
public static void main(String[] args){
int[] a={4,5,7,1,2};
System.out.println(Arrays.asList(a));
}
}
运行结果:[[I@15db9742]
2.sort():该方法是用于数组排序。
public static void sort(int[] a) {
DualPivotQuicksort.sort(a, 0, a.length - 1, null, 0, 0);
}
public static void sort(int[] a, int fromIndex, int toIndex) {
rangeCheck(a.length, fromIndex, toIndex);
DualPivotQuicksort.sort(a, fromIndex, toIndex - 1, null, 0, 0);
}
.../*对sort方法做了好多重载,byte,char,double,float,int,long,short都能
排序,这里就不都列举了,有兴趣的可以自行查看Arrays类源码。
*/
关于sort方法的实现,确实有点复杂…DualPivotQuicksort.sort …这东西源码挺长的涉及快速排序,插入排序,冒泡排序。我也没仔细研究…感兴趣的可以参考这篇博客。我们直接看看效果。
public class Arraytest {
public static void main(String[] args){
int[] a={4,5,7,1,2};
Arrays.sort(a);
System.out.println(Arrays.toString(a));
}
}
运行结果:[1, 2, 4, 5, 7]
这里说一下对于基本数据类型来说sort()方法是不稳定的排序算法,但是引用数据类型它就是稳定的排序算法…
3.parallelSort() :java8新增的并行排序算法,基于fork/join框架。
public static void parallelSort(byte[] a) {
int n = a.length, p, g;
if (n <= MIN_ARRAY_SORT_GRAN ||
(p = ForkJoinPool.getCommonPoolParallelism()) == 1)
DualPivotQuicksort.sort(a, 0, n - 1);
else
new ArraysParallelSortHelpers.FJByte.Sorter
(null, a, new byte[n], 0, n, 0,
((g = n / (p << 2)) <= MIN_ARRAY_SORT_GRAN) ?
MIN_ARRAY_SORT_GRAN : g).invoke();
}
这个这么说吧…排序算法是稳定的,将数组拆分成多个子数组,多线程进行排序,然后归并。
好处就数据特别多的时候,10000以上吧并行算法就能表现出较高的效率。
4.binarySearch() :二分法查找方法。
public static int binarySearch(long[] a, long key) {
return binarySearch0(a, 0, a.length, key);
}
binarySearch()二分法查找方法,可以看出来他返回一个int型,也就是查找元素的下标。
public class Arraytest {
public static void main(String[] args){
int[] a={4,5,7,1,2};
//二分法查找得是有序的,所以先排序。
Arrays.sort(a); //[1, 2, 4, 5, 7]
System.out.println(Arrays.binarySearch(a, 2));
}
}
运行结果:1
5.equals(): 用来比较两个数组中对应位置的每个元素是否相等。
public static boolean equals(int[] a, int[] a2) {
if (a==a2)
return true;
if (a==null || a2==null)
return false;
int length = a.length;
if (a2.length != length)
return false;
for (int i=0; i<length; i++)
if (a[i] != a2[i])
return false;
return true;
}
6.toString(),deepToString() :toString 用来打印一维数组的元素,而 deepToString 用来打印多层次嵌套的数组元素。
这里就不放例子了,toString()方法在上面的例子中多次使用。