天天看點

3.3 數組2 -【Java入門--瘋狂Java講義】

學習了數組的建立于指派,來看看數組的基本操作。

數組的複制,有兩種方法:

1.java.lang.System   arraycopy();

int[] arr1 = new int[]{1,2,3};
int[] arr2 = new int[3];
System.arraycopy(arr1, 0, arr2, 0,3);
//輸出 1 2 3
for(int i : arr2){
	System.out.println(i);
}
           

2.java.util.Arrays  copyOf();

int[] arr1 = new int[]{1,2,3};
int[] arr2 = Arrays.copyOf(arr1, 3);
//輸出1 2 3
for(int i : arr2){
	System.out.println(i);
}
           

上面兩段代碼示範了如何用兩種方法如何複制一個數組,複制數組可以用于數組的“擴容”,這裡說的擴容隻是形式上的,其實數組的長度是不能改變的,隻不過是建立了一個數組而已。

public static int[] copyOf(int[] original, int newLength) {
        int[] copy = new int[newLength];
        System.arraycopy(original, 0, copy, 0,
                         Math.min(original.length, newLength));
        return copy;
}
           

上面是粘的CopyOf的源碼,可以看出,copyOf()的底層也是調用的arraycopy實作的。

 數組的排序:

java.util.Arrays  sort()

int[] arr1 = new int[]{1,5,8,9,4,3,6};
	Arrays.sort(arr1);
	for(int i : arr1){
		System.out.println(i);
}
           

可以使用Arrays裡的sort()方法進行排序,這裡預設是升序的,當然裡面可以指定比較器,用以控制排序規則,這裡先不用了解,或者也可以自己寫比較方法,用來控制比較排序,sort方法使用的是快速排序法,排序的方法有很多,這裡我們作為初級入門的話也許了解不了,對于一些知識點的刨析,我會更新到部落格,有興趣的話 可以看看,下面我們以二分法排序來對數組進行排序:

冒泡排序的原理就是用一個數與相鄰元素依次比較,大就交換位置,依次比較完以後,大數就都飄上去了,類似于吹泡泡一樣,越往上升泡泡越大,例如 1 5 8 9 4 3 6,先用1與5比較,遇到比較大的就交換位置,比較過程如下:

1 5 8 9 4 3 6    1與5比較

5 1 8 9 4 3 6    1與8比較

5 8 1 9 4 3 6    1與9比較

5 8 9 1 4 3 6    1與4比較

5 8 9 4 1 3 6    1與3比較

5 8 9 4 3 1 6    1與6比較

5 8 9 4 3 6 1    

第一輪結束,最小的數到了最後,注意,第二輪最後一個數就不用比了,肯定最小

int[] arr = new int[]{1,5,8,9,4,3,6};
for(int i=0; i<arr.length-1;i++){//捆支比較輪數
	for(int j=0; j<arr.length-1-i; j++){//控制比較次數
		//如果該數小于後一個數,替換
		if(arr[j]<arr[j+1]){
			int temp = arr[j];
			arr[j] = arr[j+1];
			arr[j+1] = temp;
		}
	}
}
           

數組的查找:

可以自己循環周遊查找,在java.util.Arrays 裡面也有 binarySearch 方法,使用二分法來查找值,但是使用binarySearch前一定要将數組排序,不然會出現錯誤結果,

int[] arr = new int[]{1,5,8,9,4,3,6};
Arrays.sort(arr);
int index = Arrays.binarySearch(arr, 1);
           

binarySearch查找到以後,傳回的是下标,沒有這個值,傳回的是 -(插入點) - 1,例如1 2 4中查找3,沒有傳回的是-3,因為3如果插入到1 2 4 中,應該是1 2 3 4,坐标為2,而 -2-1=-3。

數組是Java基礎部分比較重要的概念,學習好數組,對于以後集合的學習有很大的幫助意義,因為集合的底層都直接或者間接的使用到了數組的相關操作。因為數組的内容太多,篇幅有限,這裡隻能列出一些最為基礎的,在學習中還是要多去鑽研。