學習了數組的建立于指派,來看看數組的基本操作。
數組的複制,有兩種方法:
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基礎部分比較重要的概念,學習好數組,對于以後集合的學習有很大的幫助意義,因為集合的底層都直接或者間接的使用到了數組的相關操作。因為數組的内容太多,篇幅有限,這裡隻能列出一些最為基礎的,在學習中還是要多去鑽研。