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.
	    }
	
}

 

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