Java陣列
一、什麼是陣列
- 陣列是相同型別資料的有序集合。
- 陣列描述的是相同型別的若干個資料,按照一定的先後次序排列組合而成。
- 其中,每一個資料稱作一個陣列元素,每個陣列元素可以透過一個下標來訪問它們。【陣列下標從0開始】
二、陣列宣告建立
-
首先必須宣告陣列變數,才能在程式中使用陣列。下面是宣告陣列變數的語法:
dataType[] arrayRefVar; //首選的方法 或者 dataType arrayRefVar[]; //效果相同單但不是首選的方法 public class ArrayDemo01 { //變數的型別 變數的名字 = 變數的值; //陣列型別 public static void main(String[] args) { int[] nums;//1.定義 int nums2[];//2.定義 /* 兩種都可以定義陣列,為什麼第一種是首選呢? 第一種是java中定義陣列的方式,而第二種是採用C和C++中的方式 第二種方式完全是因為是想要早些年的C和C++程式設計師能快速適應java 而設定的。 */ } }
-
Java語言使用new運算子來建立陣列,,語法如下:
dataType[] arrayRefVar = new dataType[arraySize]; nums = new int[10];//這裡面可以存放10個int型別的數字 int[] nums;//1.宣告一個陣列 // nums = new int[10];//這裡面可以存放10個int型別的數字 //2.建立一個陣列 //1和2可以合併起來寫 int[] numsw2 = new int[10];
-
陣列的元素是透過索引訪問的,陣列索引從0開始。
-
獲取陣列長度
arrays.length
三、三種初始化及記憶體分析
一、記憶體分析
二、三種初始化狀態
-
靜態初始化
int[] a = {1,2,3}; Man[] mans = {new Man(1,1),new Man(2,2)};
-
動態初始化
int[] a = new int[2]; a[0] = 1; a[1] = 2;
-
陣列的預設初始化
-
陣列是引用型別,它的元素相當於類的例項變數,因此陣列一經分配空間,其中的每個元素也被按照例項變數同樣的方式被隱式初始化。
public class ArrayDemos02 { public static void main(String[] args) { //靜態初始化 建立加賦值 int[] a = {1,2,3,4,5}; //Man是一個類 Man[] man = {new Man(),new Man()};//這個陣列裡的元素全是Man物件 //動態初始化:包含預設初始化 int[] a1 = new int[2]; a1[0] = 1; System.out.println(a[0]); } }
-
四、下標越界及小結
1、陣列的四個基本特點
- 其長度是確定的。陣列一旦被建立,它的大小就是不可以改變的。
- 其元素必須是相同型別,不允許出現混合型別
- 陣列中的元素可以是任何資料型別,包括基本型別和引用型別。
- 陣列變數屬於引用型別,陣列也可以看成是物件,陣列中的每個元素相當於該物件的成員變數。陣列本身就是物件,Java中物件是在堆中,因此陣列無論儲存原始型別還是其他物件型別,陣列物件本身是在堆中的。
2、陣列邊界
-
下標合法區間[0 , length-1],如果越界就會報錯
public static void main(String[] args){ int[] a = new int[2]; System.out.println(a[2]); }
-
ArrayIndexOutOfBoundsExceotion:陣列下標越界異常
-
小結
- 陣列是相同資料型別(資料型別可以為任意型別)的有序集合
- 陣列也是物件。陣列元素相當於物件的成員變數
- 陣列長度是確定的,不可變的。如果越界,則報:ArrayIndexOutOfBounds
五、陣列的使用
1、基本的
public class ArrayDemo03 {
public static void main(String[] args) {
int[] arrays = {1,2,3,4,5};
//列印全部的陣列元素
for (int i = 0; i < arrays.length; i++){
System.out.println(arrays[i]);
}
System.out.println("++++======");
//計算所有元素的總和
int sum = 0;
for (int i = 0; i < arrays.length; i++){
sum += arrays[i];
}
System.out.println("sum="+sum);
System.out.println("+==========");
//查詢最大元素
int max = arrays[0];
for (int i = 1; i < arrays.length; i++){
if(max < arrays[i]){
max = arrays[i];
}
}
System.out.println("max="+max);
}
}
2、進階的
public class ArrayDemo04 {
public static void main(String[] args) {
int[] arrays = {1,2,3,4,5};
//JDK1.5沒有下標
// for (int array : arrays) {
// System.out.println(array);
// }
//printArray(arrays);
printArray(reverse(arrays));
}
//列印陣列元素方法
//陣列可以當作引數
public static void printArray(int[] arrays){
for (int i = 0; i < arrays.length; i++) {
System.out.print(arrays[i]+"\t");
}
}
//反轉陣列
//陣列作為返回值的情況
public static int[] reverse(int[] arrays){
int[] result = new int[arrays.length];
for (int i = 0,j = result.length-1; i < result.length; i++,j--) {
result[j] = arrays[i];
}
return result;
}
}
六、多維陣列
-
多維陣列可以看成是陣列組成的陣列,比如二維陣列就是一個特殊的一維陣列,其中每一個元素都是一個一維陣列
-
二維陣列
intr a[][] = new int[2][5]//這定義了一個2行5列的陣列 public class ArrayDemo05 { public static void main(String[] args) { //4行2列 /* 1,2 array[0] 2,3 array[1] 3,4 array[2] 4,5 array[3] */ int[][] array = {{1,2},{2,3},{3,4},{4,5}}; for (int i = 0; i < array.length ; i++) { for (int j = 0; j < array[i].length; j++) { System.out.println(array[i][j]); } } } }
-
解析:以上二維陣列a可以看成一個兩行五列的陣列
七、Arrays類
-
陣列的工具類java.util.Arrays
-
由於陣列物件本身並沒有上面方法可以供我們呼叫,但API中提供了一個工具類Arrays供我們使用,從而可以對資料物件進行一些基本的操作。
-
檢視JDK文件
-
Arrays類中的方法都是static修飾的靜態方法,在使用的時候可以直接使用類名進行呼叫,而“不用”使用物件來呼叫(注意:是“不用”而不是“不能”)
-
具有以下常用功能:
-
給陣列賦值:透過 fill 方法。
-
對陣列排序:透過 sort 方法,按升序。
-
比較陣列:透過 equals 方法比較陣列中元素值是否相等。
-
查詢陣列元素:透過 binarySearch 方法能對排序好的陣列進行二分查詢法操作。
import java.util.Arrays; public class ArrayDemo06 { public static void main(String[] args) { int[] a = {2,43,3,25,456,57768,789,45}; //列印陣列元素Arrays.toString System.out.println(Arrays.toString(a)); printArray(a); //升序排序 Arrays.sort(a); System.out.println(Arrays.toString(a)); //填充 Arrays.fill(a,0); System.out.println(Arrays.toString(a)); //將第二個元素到第四個元素填充為1,注意這裡是左閉右開即[2,4); Arrays.fill(a,2,4,1); System.out.println(Arrays.toString(a)); } public static void printArray(int[] a){ for (int i = 0; i < a.length; i++) { if (i == 0){ System.out.print("["); } if (i == a.length-1){ System.out.println(a[i]+"]"); }else { System.out.print(a[i] + ", "); } } } }
-
八、氣泡排序(總共有八大排序)
- 氣泡排序程式碼非常簡單,兩層迴圈,外層冒泡輪數,裡層依次比較。