Arrays
數組是什麼
數組的特點
數組的聲明
數組的長度
元素的獲取
元素的打印
數組的擴容
數組的排序
二維數組是什麼
二維數組的定義
二維數組的內存圖
數組是什麼
數組是有序數據的集合,用於存放一組數據
數組的特點
- 數組內元素的類型統一(與數組類型相同)
- 數組內元素的排序是有序的(按賦值時的順序排列)
- 數組本身是不可變的,數組元素可變 (底層被final修飾)
數組的聲明(以int類型爲例)
聲明方式 | 特點1 | 特點2 |
---|---|---|
int[] array = {1,2,3,4} | 聲明與初始化同時進行,不可二次賦值 | |
int[] array = new int[]{1,2,3,4} | 聲明與初始化同時進行,可以多次賦值 | |
int[] array = new int[int n] | 聲明與初始化完全分離,可以多次賦值 | 數組內有默認元素,元素值視數據類型而定 |
注意:無論何種方式,數組的長度在被定義之時就已經確定下來了,且無法改變
數組的長度
數組的長度指的就是數組內元素的個數,數組本身沒有長度
- 獲取數組長度:array.length
元素的獲取
數組元素都有屬於自己的索引,從0開始,到**(array.length-1)**結束
- 示例:array [0],array [1],array [2],…,array [array .length-1]
注意:不能獲取超出長度的元素,否則將拋出數組下標越界異常
元素的打印
- 方式一:遍歷/迭代—>輸出
- 方式二:Arrays.toString(Array)
注意:直接打印數組得到的是數組地址
數組的擴容
數組本身長度是不可變的,無法在原來的數組上新增
擴容方法特點 | 特點 |
---|---|
創建一個新的數組,遍歷源數組元素賦值給新數組,再將新數組賦值給源數組 | 基礎、繁瑣 |
System.arraycopy(源數組 ,源數組傳遞元素的開始位置 ,新數組 ,新數組接收元素的開始位置 ,從源數組複製到新數組的元素長度 ) |
只實現了數組的複製,沒有對源數組進行擴容 |
Arrays.copyof(源數組 ,長度 ) |
自我複製實現對源數組的擴容 |
注意:
- System.arraycopy:
- 源數組傳遞元素時要注意越界問題(傳遞元素的開始位置+傳遞元素的長度<=源數組長度)
- 新數組要留有足夠的長度接收傳遞過來的元素(新數組長度-接收元素的開始位置>=傳遞元素的長度)
- Arrays.copyof:
- 返回一個數組,數組類型與源數組相同
- 複製時,傳遞元素與接收元素都默認從第一個位置開始
- 除了擴容,還可以實現數組長度的縮減
數組的排序
package myTest;
import java.util.Arrays;
public class Sort {
public static void main(String[] args) {
//JDK自帶排序方法,默認從小到大
int[] arr = new int[] {6,4,1,3,77,11,34};
Arrays.sort(arr);
System.out.println(Arrays.toString(arr));
//選擇排序,從小到大
int[] brr = new int[] {6,4,1,3,77,11,34};
for(int i=0;i<brr.length-1;i++) {
for(int j=i+1;j<brr.length;j++) {
if(brr[i]>brr[j]) {
int temp = brr[j];
brr[j] = brr[i];
brr[i] = temp;
}
}
}
System.out.println(Arrays.toString(brr));
//冒泡排序,從小到大
int[] crr = new int[] {6,4,1,3,77,11,34};
for(int i=0;i<crr.length-1;i++) {
for(int j=0;j<crr.length-1;j++) {
if(crr[j]>crr[j+1]) {
int temp = crr[j+1];
crr[j+1] = crr[j];
crr[j] = temp;
}
}
}
System.out.println(Arrays.toString(crr));
//插入排序,從小到大
int[] drr = new int[] {6,4,1,3,77,11,34};
for(int i=1;i<drr.length;i++) {
for(int j=i;j>0;j--) {
if(drr[j-1]>drr[j]) {
int temp = drr[j];
drr[j] = drr[j-1];
drr[j-1] = temp;
}else {
break;
}
}
}
System.out.println(Arrays.toString(drr));
}
}
二維數組是什麼
數組的數組,將一個數組看做是一種數據類型,創建該數據類型的數組
- 示例:int[ ] [ ],其中int[ ]可以看做是一個數據類型,int[ ] [ ]就是這個類型的一個數組
注意:Java中沒有二維數組的概念,正確的叫法是數組類型的數組
二維數組的定義
package day20191026;
public class Demo02 {
public static void main(String[] args) {
//創建了一個整形數組類型的數組,其中的元素都是默認值
int[][] a = new int[3][];
//二維數組的每一個元素都是數組,使用前需要先聲明數組
//當二維數組中的元素長度不同時
a[0] = new int[4];
a[1] = new int[5];
a[2] = new int[6];
//當二維數組中的元素長度相同時
int[][] a = new int[3][4];
}
}
注意:聲名二維數組時,需要將二維數組的長度填在 “new int[ ] [ ]” 中的前一個 “[ ]” 中,將元素的長度填在後一個 “[ ]” 中
二維數組的內存圖
以new int[3] [4]爲例