Java中Arrays工具类概述

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!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值