陣列
定義
相同型別資料的有序集合
宣告建立
- 必須先宣告陣列,才能使用(動態初始化)
int[] nums;//定義 java
int nums2[];//定義 c/c++
都可以用,首選第一個
- 宣告後要建立
nums = new int[10];(預設初始化,0或null)
- 靜態初始化: 建立+賦值
int a[] = {1,2,3,4,5};
四個基本特點
-
長度是確定的,一旦被建立,大小不可變
-
陣列中元素為相同型別
-
陣列元素可以是任何資料型別,包括基本型別和引用型別
-
陣列變數是引用型別,陣列可以看成是物件,每個元素相當於該物件的成員變數。
陣列物件本身在堆中
陣列邊界
下標的合法區間:[0,length-1]
如果越界就會報錯:ArrayIndexOutOfBoundsException(陣列下標越界異常)
小結
- 陣列是相同資料型別的有序集合
- 陣列也是物件,陣列元素相當於物件的成員變數
- 陣列的長度是確定的,不可變的。如果越界,就會報錯
陣列使用
- 普通的for迴圈
- for-each迴圈
- 陣列作為方法的引數
- 陣列作為返回值
多維陣列
多維陣列可以看成是陣列的陣列,比如二維陣列就是一個特殊的一維陣列,其每一個元素都是一個一維陣列。
int a[][] = new int[2][5];
Array類
-
toString 用於列印
-
sort 排序
-
fill 賦值
-
equals 比較是否相等
-
binarySearch 查詢
更多看jdk8幫助文件
氣泡排序
排序後續再新開隨筆
稀疏陣列
-
當一個陣列的大部分元素為0,或為同一值時,可以使用稀疏陣列來儲存該陣列
-
處理方法:
- 記錄陣列一共有幾行幾列,有多少個不同值
- 把不同值的元素的行列及值記錄在一個小規模的陣列中,從而縮小程式的規模
-
下圖:左邊為原始陣列,右邊是稀疏陣列
小練習:
/**
* @version: java version 1.8
* @Author: Mr Orange
* @description:
* @date: 2024-07-02 13:35
*/
public class Nums {
public static void main(String[] args) {
//建立新的陣列
int[][] arr1 = new int[11][11];
arr1[0][0] = 1;
arr1[3][2] = 2;
arr1[6][3] = 1;
arr1[7][4] = 2;
System.out.println("===============================");
System.out.println("原始陣列");
//列印陣列
for (int i = 0; i < arr1.length; i++) {
for (int j = 0; j < arr1[i].length; j++) {
System.out.print(arr1[i][j] + " ");
}
System.out.println();
}
System.out.println("===============================");
System.out.println("稀疏陣列:");
int[][]xishu = xiShu(arr1);
System.out.println("還原陣列");
restore(xishu);
}
public static int[][] xiShu(int[][] arr1) {
//計算有多少個不同資料
int count = 0;
for (int i = 0; i < arr1.length; i++) {
for (int j = 0; j < arr1[i].length; j++) {
if (arr1[i][j] != 0) {
count++;
}
}
}
//建立稀疏陣列
int[][] arr2 = new int[count+1][3];
//給第一行賦值
arr2[0][0] = arr1.length;
arr2[0][1] = arr1[0].length;
arr2[0][2] = count;
//將不同資料的行、列、值,記錄到稀疏陣列中
int flag = 1;
for (int i = 0; i < arr1.length; i++) {
for (int j = 0; j < arr1[i].length; j++) {
if (arr1[i][j] != 0) {
arr2[flag][0] = i;
arr2[flag][1] = j;
arr2[flag][2] = arr1[i][j];
flag++;
}
}
}
//列印陣列
for (int i = 0; i < arr2.length; i++) {
for (int j = 0; j < arr2[i].length; j++) {
System.out.print(arr2[i][j] + " ");
}
System.out.println();
}
System.out.println("===============================");
return arr2;
}
public static int[][] restore(int[][] arr2) {
//還原
int[][] arr3 = new int[arr2[0][0]][arr2[0][1]];
for (int i = 1; i < arr2.length; i++) {
arr3[arr2[i][0]][arr2[i][1]]= arr2[i][2];
}
//列印陣列
for (int i = 0; i < arr3.length; i++) {
for (int j = 0; j < arr3[i].length; j++) {
System.out.print(arr3[i][j] + " ");
}
System.out.println();
}
return arr3;
}
}