public static String toString(int[] a):
int[] arr = {24,69,80,57,13} ;
System.out.println(Arrays.toString(arr)) ;
Arrays的toString(int[] arr)的源码
Java面向对象的原则:
实际开发中有对象存在,一定要给对象做非空判断!
//arr=a={24,69,80,57,13}
public static String toString(int[] a) {
if (a == null)//判断数组对象为空
return “null”;//当前对数组对象为空
int iMax = a.length - 1;//a = arr.length-1 = 4 ;
if (iMax == -1) //数组对象不为空,但是没有数据
return “[]”;//返回[]
//数据对象不为空,并且有数据:24, 69,80,57,13
StringBuilder b = new StringBuilder();//创建一个字符串缓冲区
b.append('[');//拼接了左中括号
for (int i = 0; ; i++) {
b.append(a[i]);//字符串缓冲区对象.append(arr[i])
if (i == iMax)//i==4
return b.append(']').toString(); //13]
b.append(", ");//没有取到最大索引:24, 69, 80, 57,
}
}
//排序后的
[13, 24, 57, 69, 80]
public static int binarySearch(int[] a, int key)
binarySearch(int[] arr,int key)的源码
public static int binarySearch(int[] a, int key) {
return binarySearch0(a, 0, a.length, key);
}
private static int binarySearch0(int[] a, int fromIndex, int toIndex,
int key) {
//int[] a = arr {13, 24, 57, 69, 80}
//fromIndex = 0 从指定的索引开始搜索
//toIndex=arr.length = 5
//int key 577
int low = fromIndex; //low = 0 int min
int high = toIndex - 1;// high = arr.length-1 = 4 ; int max
while (low <= high) { {13, 24, 57, 69, 80}
int mid = (low + high) >>> 1; int mid = (0+4)>>>1 // mid =2 ,mid=3,mid=4
int midVal = a[mid]; //int mindVal= arr[mid] = 57或者 69 或者80
if (midVal < key) //if(midValue < key = 577)
low = mid + 1; //low=min = mid+1 =3 或者 4 , 或者5
else if (midVal > key)
high = mid - 1;
else
return mid; // key found //midVal ==value return mid ;返回中间索引
}
return -(low + 1); // key not found. return -(low+1)=-(5+1) = -6 //找不到这个值
}