最近看了一些關於java數組的資料,在此總結一下:
一、數組的定義和類型:數組就是類型相同的數據對象元素集合。簡單的說:就是類型相同的數據存儲在一個容器裏面【注意:Java中的數組是引用類型,即使一個數組中存放的都是基本數據類型,但這個數組類型同樣是引用類型】。
二、數組的聲明和初始化:
1、 數組的聲明有兩種方式:一種是[]放在類型的後面,另一種是放在變量名的後面。建議使用第一種類型,數組本身就是一種類型,也就是說int[] 是一種類型。第一種也符合Java中變量的聲明規範。
eg: int[] arrayOne; 或 int arrayTwo[];
2、數組的初始化有兩種方式:
第一種動態初始化:在數組定義的時候只指定了數組的長度。
第二種靜態初始化:在定義數組的同時顯示的爲數組元素賦值。
eg:
一維數組的初始化:
1) int[] a; //聲明,沒有初始化
2) int[] a=new int[5]; //初始化爲默認值,int型爲0
3) int[] a={1,2,3,4,5}; //初始化爲給定值
4) int[] a=new int[]{1,2,3,4,5}; //同(3)
int[] a=new int[5]{1,2,3,4,5}; //錯誤,如果提供了數組初始化操作,則不能定義維表達式
5) int[] a;
a=new int[5]; //正確,同(2)一樣
int[] a;
a={1,2,3,4,5}; //錯誤,數組常量只能在初始化操作中使用,如(3)
6) int a[];
a[0]=1; //錯誤,因爲數組沒有初始化,不能賦值
a[1]=2;
三、數組的長度:
數組長度在初始化的時候就已經被指定了,數組長度一旦被指定長度,就不能進行修改。也就是說,數組的長度是不可變。
獲取數組的長度是通過length屬性得到。而不是length()方法。
四、數組的遍歷方法:
方法一、通過普通的for循環遍歷數組元素
eg:
int[] arrayX=new int[]{1,2,3,5,9,10};//定義一個整型數組arrayX
for(int i=0;i<arrayX.lenght;i++){ //循環遍歷數組元素
System.out.println(arrayX[i]); //輸出數組中的每一個元素的值。
}
方法二、通過特殊for循環遍歷數組元素eg:
String[] arrayStr=new String[]{"aa","bb","cc","dd"}
for(String str:arrayStr){
System.out.println(str);
}
五、多維數組:
多維數組可以理解爲數組中的數組。Java中數組類型是引用類型,因此,數組變量其實就是一個引用,這個引用指向真實的數組內存。數組元素的類型也可以是引用,如果數組元素的引用再次指向真實的數組內存[Java中允許多維數組當成一維數組處理。初始化多維數組時可以先只初始化最左邊的維數,此時該數組的每個元素都相當於一個數組引用變量,這些元素還需要進一步初始化]。
下面以二維數組爲例:
public static void main(String[] args) {
//定義一個二維數組
int[][] array;
//把二維數組當成一維數組進行初始化,系統默認值是null
array=new int[4][];
//把array數組當成一維數組,遍歷array數組中的每一個元素、
for(int i=0;i<array.length;i++){
System.out.println(array[i]);
}
//初始化array數組的第一個元素
array[0]=new int[3];
//給array數組中的第一個元素所指數組的第二個元素賦值
array[0][1]=12;
//array數組的第一個元素是一個一維數組。遍歷該一維數組
for(int j=0;j<array[0].length;j++){
System.out.println(array[0][j]);
}
}
該實例在內存中示意圖:
二位數組實例:
定義一個二維數組,動態指定數組的行和列的大小,動態給數組賦值,並打印輸出二維數組的元素。
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("請輸入二維數組行的大小:");
int row=sc.nextInt();
int[][] array;
array=new int[row][];
for(int i=0;i<array.length;i++){
System.out.println("請輸入列的大小:");
int cols=sc.nextInt();
array[i]=new int[cols];
for(int j=0;j<array[i].length;j++){
System.out.println("請輸入第"+(i+1)+"行的第"+(j+1)+"列的值:");
array[i][j]=sc.nextInt();
}
}
System.out.println("\n\n");
for(int i=0;i<array.length;i++){
for(int j=0;j<array[i].length;j++){
System.out.print(array[i][j]+" ");
}
System.out.println();
}
}
六、操作數組的工具類:
Java提供的Arrays類裏包含了一些static修飾方法可以直接操作數組,下面簡單的列舉幾個常見的方法:
1.void sort(type[] a) 該方法對數組a的數組元素進行排序。2.void sort(type[] a,int fromIndex,int toIndex):該方法和上面的方法類似,區別在與該方法僅僅對fromIndex到toIndex索引的元素進行排序。
3.boolean equals(type[] a,type[] b):如果a數組和b數組的長度相等,而且a數組和b數組的數組元素一一相同,該方法返回true。
4.type[] copyOf(type[] original,int newLength):這個方法將會把original數組複製成一個新數組,其中length是新數組的長度,如果length小於original數組的長度 則新數組就是原數組的前面length個元素;相反,如果length大於original數組的長度,則新數組的前面元素就是原數組的所有元素。後面補充0(數值型)、false(布爾類型)或者null(引用類型)。
5.String toString(type[] a):該方法將一個數組轉換成一個字符串,該方法按順序把多個數組元素連綴在一起。多個數組元素使用英文逗號和空格隔開。
6.void fill(type[] a,type val):該方法將會把a數組所有元素值都賦值爲val。
下面是一個簡單的實例:
public static void main(String[] args) {
//定義一個數組a
int[] a=new int[]{3,4,5,7,6,2};
//定義一個數組b
int[] b=new int[]{3,4,5,7,6,2};
System.out.println("a數組和b數組是否相等:"+Arrays.equals(a, b));
int[] c=Arrays.copyOf(a, 7);
System.out.println("a數組和c數組是否相等:"+Arrays.equals(a, c));
System.out.println("c數組的元素爲:"+Arrays.toString(c));
//將b數組中的所有元素都賦值爲30
Arrays.fill(b, 30);
System.out.println("b數組元素的爲:"+Arrays.toString(b));
Arrays.sort(a);
System.out.println("a數組排序後的元素爲:"+Arrays.toString(a));
}