java core--java 核心技术学习笔记----java.util.Arrays

package com.zfsoft.monday;

import java.util.Arrays;

public class Array {
	
	Arrays autil ;
	
	static int[] a = {3,5,2,6,7,4,5};
	static int[] b = {11,55,88,33};
	static int [] c;
	
	public static void main(String[] args) {
		
		Array arr = new Array();
		
		//排序
		arr.sort(a);
		
		//没有通过排序的数组进行二分搜索
		for(int serachObject:a){
			
			arr.arraySearch(a, serachObject);
		}
		
		
		//通过排序后的数组进行二分搜索
		arr.sort(a);
		
		for(int serachObject:a){
			
			arr.arraySearch(a, 4);
		}
		
		
		//数组拷贝
		arr.copyArray(a,0,b,0,b.length);
		
		//数组填充
		arr.Fill(b, 0, b.length, 888);
		
	}
	
	/**
	 * 数组的拷贝
	 * 当源数组和拷贝数组的长度不一致时,应取最短的长度,否则会数组越界
	 */
	
	public  void copyArray(int[] copyArray, int copyStartIndex ,int[] Array,int stratIndex,int length){
		
		System.arraycopy(copyArray, copyStartIndex, Array, stratIndex, length);
		
		System.out.println(autil.toString(b));
	}
	
	/**
	 * jdk6中 的新方法
	 */
	
	//返回复制后的新数组
	//public static int[] copyOf(int[] original,int newLength);
	
	
	//根据起点索引,和终点索引,复制相应的值到新数组
	//public static int[] copyOfRange(int[] original,int from,int to);
	
	
	
	
	/**
	 * 填充数组
	 * 填充数组的最后一个值的索引不包含在替换内,例子:如果截止索引为1,那么只填充array[0]位置上值,不填充array[1]
	 * @param array
	 * @param startIndex
	 * @param endIndex
	 * @param val
	 */
	public void Fill(int[] array,int startIndex,int endIndex,int val){
		autil.fill(array, startIndex,endIndex,val);
		
		System.out.println(autil.toString(array));
	}
	
	
	
	/**
	 * 采用冒泡排序法对数组进行排序
	 * @param array
	 */
	public void sort(int[] array){
		
		System.out.println("排序前"+autil.toString(array));
		
		autil.sort(array);
		
		System.out.println("排序后"+autil.toString(array));
	}
	
	
	
	/**
	 * 采用二分搜索法,
	 * 此方法查询前,必须对数组进行排序。
	 * @param a
	 * @param key
	 * @return
	 */
	
	public void arraySearch(int[] array,int object){
		
		//排序
		autil.sort(array);
		
		System.out.println(Array.binarySearch(array, object));
		
	}
	
	
	/**
	 * 二分搜索的源代码
	 * @param a
	 * @param key
	 * @return
	 */
	public static int binarySearch(int[] a, int key) {
		int low = 0;
		int high = a.length-1;

		while (low <= high) {
		    int mid = (low + high) >> 1;
		    int midVal = a[mid];

		    if (midVal < key)
			low = mid + 1;
		    else if (midVal > key)
			high = mid - 1;
		    else
			return mid; // key found
		}
		return -(low + 1);  // key not found.
	    }
	
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章