Arrays类
Arrays类的基本介绍
-
Arrays里面包含了一系列的静态方法,用于管理或操作数组(比如排序和搜索)
Arrays类的常用方法
-
toString():返回数组的字符串形式
public class Demo01 {
public static void main(String[] args) {
int[] a = {1,34,5,77};
System.out.println(Arrays.toString(a));
}
}
-
sort():默认升序排序和定制排序
默认升序排序:
public class Demo01 {
public static void main(String[] args) {
int[] a = {7,66,5,33};
//数组是引用类型,形参的改变会影响实参
Arrays.sort(a);
System.out.println(Arrays.toString(a));
}
}
定制排序:
-
sort()重载的方法中,也可以通过传入一个接口 Comparator 实现定制排序。调用定制排序时,需要传入两个参数 (1) 排序的数组 arr (2) 实现了Comparator接口的匿名内部类,要求实现 compare方法。
-
源码分析:
-
Arrays.sort(arr, new Comparator()
-
最终到 TImSort类的 private static <T> void binarySort(T[] a, int lo, int hi, int start,Comparator<? super T> c)
-
执行到 binarySort方法的代码时,会根据动态绑定机制,c.compare执行我们传入的匿名内部类 compare() 方法
-
//binarySort方法里的代码
while (left < right) {
int mid = (left + right) >>> 1;
if (c.compare(pivot, a[mid]) < 0)
right = mid;
else
left = mid + 1;
}
4.public int compare(Object o1, Object o2) 返回的值 > 0 还是 < 0 ,会影响整个排序结果
public class Demo01 {
public static void main(String[] args) {
Integer[] arr = {7,66,5,33};
Arrays.sort(arr, new Comparator() {
@Override
public int compare(Object o1, Object o2) {
Integer i1 = (Integer)o1;
Integer i2 = (Integer)o2;
return i2-i1;
}
});
System.out.println(Arrays.toString(arr));
}
}
-
binarySearch(): 通过二分搜索法进行查找,要求数组必须先排好序,否则不能使用该方法;如果数组不存在该元素,就返回 -(low + 1),low代表应该存在的位置索引
public class Demo01 {
public static void main(String[] args) {
Integer[] arr = {1,5,6,9};
int index = Arrays.binarySearch(arr,5);
System.out.println("index="+index);
}
}
-
copyOf():数组元素的复制
public class Demo01 {
public static void main(String[] args) {
Integer[] arr = {1,5,6,9};
Integer[] newArr = Arrays.copyOf(arr, arr.length);
System.out.println(Arrays.toString(newArr));
Integer[] newArr1 = Arrays.copyOf(arr, arr.length-2);
System.out.println(Arrays.toString(newArr1));
Integer[] newArr2 = Arrays.copyOf(arr, arr.length+1);
System.out.println(Arrays.toString(newArr2));
}
}
-
fill():数组填充,可以理解成替换原来数组的元素
public class Demo01 {
public static void main(String[] args) {
Integer[] arr = {1,5,6,9};
Arrays.fill(arr,66);
System.out.println(Arrays.toString(arr));
}
}
-
equals():比较两个数组元素内容是否完全一致
public class Demo01 {
public static void main(String[] args) {
Integer[] arr1 = {1,5,6,9};
Integer[] arr2 = {1,5,6,9};
Integer[] arr3 = {1,5,6,9,8,8,8,8};
System.out.println(Arrays.equals(arr1,arr2));
System.out.println(Arrays.equals(arr1,arr3));
}
}
-
asList():将一组值,转换成list集合
public class Demo01 {
public static void main(String[] args) {
Integer[] arr1 = {1,5,6,9};
//list编译类型是 List 接口
//list运行类型是 java.util.Arrays$ArrayList,是Arrays的静态内部类
List list = Arrays.asList(2, 6, 1, 7, 3);
System.out.println(list);
System.out.println(list.getClass());
}
}