package com.etc.Arrays;

import java.util.Arrays;

public class TestArraysClass {

	public static void main(String[] args) {
		int[] arr=new int[]{5,1,3,2,6,9,10};
		int key=6;
		
		//1、Arrays.toString:返回指定数组内容的字符串表示形式。
		System.out.println("排序前:"+Arrays.toString(arr));//[5, 1, 3, 2, 6, 9, 10] 
		
		//2、Arrays.sort:对指定的 int 型数组按数字升序进行排序。
		Arrays.sort(arr);
		System.out.println("\n排序后:"+Arrays.toString(arr));//[1, 2, 3, 5, 6, 9, 10]
		
		//3、 Arrays.binarySearch:使用二分搜索法来搜索指定的 int 型数组,以获得指定的值。
		int bs = Arrays.binarySearch(arr, key);
		System.out.println("\n使用二分搜索法查询数据元素为["+key+"]的数组索引下标是:"+bs);//使用二分搜索法查询数据元素为[6]的数组索引下标是:4 
		
		//使用二分搜索法来搜索指定的 int 型数组的范围,以获得指定的值。
		int bs2 = Arrays.binarySearch(arr,0,arr.length-4,key);
		System.out.println("\n使用二分搜索法搜索指定的 int 型数组的范围:");
		System.out.println("查询数据元素为["+key+"]的数组索引下标是:"+bs2); 
		System.out.println("查询数据元素为20的数组索引下标是"+ Arrays.binarySearch(arr,0,arr.length-4,20)); 
		
		//不再搜索范围内的情况---如果它包含在数组的指定范围内,则返回搜索键的索引;否则返回 (-(插入点) - 1)。插入点 被定义为将键插入数组的那一点       就是指定范围长度的负数
		System.out.println("查询数据元素为["+key+"]的数组索引下标是:"+Arrays.binarySearch(arr,0,arr.length-3,key));//-4-1==-5 
		System.out.println("查询数据元素为["+key+"]的数组索引下标是:"+Arrays.binarySearch(arr,0,arr.length-4,key));//-3-1=-4 
		System.out.println("查询数据元素为["+key+"]的数组索引下标是:"+Arrays.binarySearch(arr,0,arr.length-5,key));//-2-1=-3 
		System.out.println("查询数据元素为["+key+"]的数组索引下标是:"+Arrays.binarySearch(arr,0,arr.length-6,key));//-1-1=-2 
		System.out.println("查询数据元素为["+key+"]的数组索引下标是:"+Arrays.binarySearch(arr,0,arr.length-7,key));//-0-1=-1 
		
		//4、Arrays.copyOf:复制一个数组
		int[] arr2={5,1,3,2,6,9,10};
		arr2=Arrays.copyOf(arr,5);
		System.out.println("\narr2:"+Arrays.toString(arr2));//arr2:[1, 2, 3, 5, 6]  
		
		arr2=Arrays.copyOf(arr,10);
		System.out.println("arr2:"+Arrays.toString(arr2));//arr2:[1, 2, 3, 5, 6, 9, 10, 0, 0, 0]  
		
		//复制指定范围内的数组
		arr2=Arrays.copyOfRange(arr,1,arr.length);
		System.out.println("arr2:"+Arrays.toString(arr2));//arr2:[2, 3, 5, 6, 9, 10]  
		
		//5、Arrays.equals:比较两个数组是否相等
		boolean b=Arrays.equals(arr,arr2); 
		System.out.println("\nArrays.equals:"+b);//Arrays.equals:false
		
		//6、Arrays.copyOfRange:
		arr2=Arrays.copyOfRange(arr,0,arr.length);
		
		System.out.println("\n"+arr.hashCode()+"---"+arr2.hashCode());//2110121908---32374789
		System.out.println(arr.length+"---arr---"+Arrays.toString(arr));//7---arr---[1, 2, 3, 5, 6, 9, 10]
		System.out.println(arr2.length+"---arr2---"+Arrays.toString(arr2));//7---arr2---[1, 2, 3, 5, 6, 9, 10]
		System.out.println("Arrays.equals:"+Arrays.equals(arr,arr2));//Arrays.equals:true
		
		arr2=arr;
		System.out.println("equals:"+arr.equals(arr2));//equals:true
		System.out.println(arr.hashCode()+"---"+arr2.hashCode());//366712642---366712642 
		
		//7、将指定的 int 值分配给指定 int 型数组的每个元素。
		Arrays.fill(arr2,11);
		System.out.println("\nArrays.fill(arr2,11): "+Arrays.toString(arr2));//Arrays.fill(arr2,11): [11, 11, 11, 11, 11, 11, 11]
		//将指定的 float 值分配给指定 float 型数组指定范围中的每个元素。 
		Arrays.fill(arr2,2,6,20);
		System.out.println("Arrays.fill(arr2,2,6,20): "+Arrays.toString(arr2));//Arrays.fill(arr2,2,6,20): [11, 11, 20, 20, 20, 20, 11]
	}

}