Java中Arrays工具类是针对数组进行操作的工具类,包括排序和查找功能。
三个主要方法:
- public static String toString(int[] a):把数组转成字符串
- public static void sort(int[] a):对数组进行排序
- public static int binarySearch(int[] a,int key):二分查找
代码演示:
public class ArraysDemo {
public static void main(String[] args) {
//定义一个数组
int[] arr = {24,69,80,57,13};
//public static String toString(int[] a):把数组转成字符串
System.out.println("排序前:"+Arrays.toString(arr));
//public static void sort(int[] a):对数组进行排序
Arrays.sort(arr);
System.out.println("排序后:"+Arrays.toString(arr));
//public static int binarySearch(int[] a,int key):二分查找
System.out.println("binarySearch:"+Arrays.binarySearch(arr, 57));
System.out.println("binarySearch:"+Arrays.binarySearch(arr, 577));
}
}
运行结果:
排序前:[24, 69, 80, 57, 13]
排序后:[13, 24, 57, 69, 80]
binarySearch:2
binarySearch:-6
对Arrays工具类的方法的源码进行解析:
int[] arr = {24,69,80,57,13};
System.out.println("排序前:"+Arrays.toString(arr));
toString源码:
public static String toString(int[] a) {
if(a == null) {
return "null";//说明数组对象不存在
}
int iMax = a.length - 1;//a.length=0;说明没有元素,所以iMax==-1
if(iMax == -1) {
return "[]";//说明数组存在,但是没有元素
}
StringBuilder b = new StringBuilder();
b.append('[');//"["
for(int i = 0;;i++) {//此处第二个分号处为空,默认永远为true
b.append(a[i]);//"[24, 69, 80, 57, 13"
if(i == iMax)
//"[24 ,69 ,80 ,57, 13]",然后转换成字符串
return b.append(']').toString();
b.append(", ");//"[24, 69, 80, 57, "
}
}
--------------------------------------------------------------------
binarySearch源码:
public static int binarySearch(int[] a,int key)
int[] arr = {13, 24, 57, 69, 80};
System.out.println("binarySearch:"+Arrays.binarySearch(arr,577));
public static int binarySearch(int[] a,int key) {
//a --- arr --- {13, 24, 57, 69, 80}
//key --- 577
return binarySearch0(a,0,a.length,key);
}
private static int binarySearch0(int[] a,int fromIndex,int toIndex,int key) {
//a --- arr --- {13, 24, 57, 69, 80}
//fromIndex --- 0
//toIndex -- 5
//key --- 577
int low = fromIndex;//low = 0
int high = toIndex - 1;//high = 4
while(low <= high) {
int mid = (low + high) >>> 1;//无符号右移//mid = 2,mid=3,mid=4
int midVal = a[mid];//midVal = 57 midVal = 69,midVal=80
if(midVal < key) {
low = mid + 1;//low = 3 low=4 low = 5
else if(midVal > key) {
high = mid - 1;
}else{
return mid;//key found
}
return - (low + 1);//key not found
}
}
}
从以上源码分析我们可以得到一个开发原则:只要是对象,我们就要判断对象是否为null!