目錄
一、數組的概述
1. 數組的理解:
2. 數組相關的概念:
3. 數組的特點:
4. 數組的分類:
5.數據結構:
二、一維數組
1. 一維數組的聲明與初始化
2. 一維數組元素的引用:
3. 數組的屬性:
4.一維數組的遍歷
4.1 For-Each 循環
5.一維數組元素的默認初始化值
6.一維數組的內存結構
?7.一維數組的操作示例
三、二維數組
1.如何理解二維數組?
2.二維數組的聲明與初始化
3.如何調用二維數組元素:
4.二維數組的屬性:length
5.遍歷二維數組元素
6.二維數組元素的默認初始化值
四、數組的常見算法
1. 數組的創建與元素賦值:
2. 針對于數值型的數組:
3. 數組的賦值與復制
4.數組中指定元素的查找:搜索,檢索
4.1 線性查找:
4.2 二分法查找:
五.數組的排序算法
一、數組的概述
1. 數組的理解:
數組(Array),是多個相同類型數據一定順序排列的集合,并使用一個名字命名,并通過編號的 方式對這些數據進行統一管理。
2. 數組相關的概念:
數組名 元素? 角標、下標、索引 數組的長度:元素的個數
3. 數組的特點:
- 數組是序排列的
- 數組屬于引用數據類型的變量。數組的元素,既可以是基本數據類型,也可以是引用數據類型
- 創建數組對象會在內存中開辟一整塊連續的空間
- 數組的長度一旦確定,就不能修改。
4. 數組的分類:
① 按照維數:一維數組、二維數組、。。。
② 按照數組元素的類型:基本數據類型元素的數組、引用數據類型元素的數組
5.數據結構:
- 數據與數據之間的邏輯關系:集合(關系很弱)、一對一(數組里面的元素)、一對多(二叉樹)、多對多(社交網絡)
- 數據的存儲結構: 線性表:順序表(比如:數組)、鏈表、棧、隊列 樹形結構:二叉樹 圖形結構:
二、一維數組
1. 一維數組的聲明與初始化
正確的方式:
int num;//聲明num=10;//初始化int id=101;//聲明+初始化int[]ids;//聲明//1、靜態初始化:數組的初始化和數組元素的賦值操作同時進行ids=new int[]{101,102,103,104};//2、動態初始化:數組的初始化和元素的賦值操作分開進行String[]name=new String[5];int[]arr={1,2,3,4,5};
錯誤的方式:
//int[] arr1 = new int[];
//int[5] arr2 = new int[5];
//int[] arr3 = new int[3]{1,2,3};
2. 一維數組元素的引用:
通過角標的方式調用。(數組的角標(或索引從0開始的,到數組的長度-1結束)
names[0] = "王銘";
names[1] = "王赫";
names[2] = "張學良";
names[3] = "孫居龍";
names[4] = "王宏志";
3. 數組的屬性:
數組的屬性:length
System.out.printIn(name.length);
System.out.printIn(ids.length);
說明: 數組一旦初始化,其長度就是確定的。arr.length 數組長度一旦確定,就不可修改。
4.一維數組的遍歷
for(int i = 0;i < names.length;i++){System.out.println(names[i]);
}
4.1 For-Each 循環
JDK 1.5 引進了一種新的循環類型,被稱為 For-Each 循環或者加強型循環,它能在不使用下標的情況下遍歷數組。
語法格式如下:
for(type element: array) {System.out.println(element); }
?實例:
int[] arr=new int[]{1,2,3};for (int e:arr) {System.out.println(e);}
5.一維數組元素的默認初始化值
- 數組元素是整型:0
- 數組元素是浮點型:0.0
- 數組元素是char型:0或'\u0000',而非'0'
- 數組元素是boolean型:false
- 數組元素是引用數據類型:nul
6.一維數組的內存結構
上圖給出java程序執行時的內存分配。圖中有棧,堆,方法區,各區域分別存儲的數據有:
- 棧:保存局部變量;
- 堆:保存new出的對象
- 方法區
- 常量池:字符常量,如字符串;
- 靜態域:靜態變量
?
?7.一維數組的操作示例
?該實例完整地展示了如何創建、初始化和操縱數組:
public static void main(String[] args) {double[] myList = {1.9, 2.9, 3.4, 3.5};// 打印所有數組元素for (int i = 0; i < myList.length; i++) {System.out.println(myList[i] + " ");}// 計算所有元素的總和double total = 0;for (int i = 0; i < myList.length; i++) {total += myList[i];}System.out.println("Total is " + total);// 查找最大元素double max = myList[0];for (int i = 1; i < myList.length; i++) {if (myList[i] > max) max = myList[i];}System.out.println("Max is " + max);}
三、二維數組
1.如何理解二維數組?
數組屬于引用數據類型 數組的元素也可以是引用數據類型 一個一維數組A的元素如果還是一個一維數組類型的,則,此數組A稱為二維數組。
2.二維數組的聲明與初始化
正確的方式:
int[]arr=new int[]{1,2,3};//一維數組的靜態初始化//二維數組的靜態初始化int[][] arr1=new int[][]{{1,2,3},{4,5,6},{7,8,9}};//動態初始化1String[][]arr2=new String[2][3];//動態初始化2String[][]arr3=new String[3][];//其他:不標準但是有效int[]arr4[]=new int[][]{{1,2},{3,4},{5,6}};System.out.println(arr4[1][1]);//輸出:4int []arr5[]={{1,2},{3,4},{5,6}};System.out.println(arr5[0][0]);//輸出:1
3.如何調用二維數組元素:
System.out.println(arr1[0][1]);//2
System.out.println(arr2[1][1]);//nullarr3[1] = new String[4];
System.out.println(arr3[1][0]);
System.out.println(arr3[0]);
4.二維數組的屬性:length
int[][] arr1=new int[][]{{1,2,3},{4,5,6}};System.out.println(arr1.length);//2System.out.println(arr1[0].length);//3
5.遍歷二維數組元素
for(int i = 0;i < arr4.length;i++){for(int j = 0;j < arr4[i].length;j++){System.out.print(arr4[i][j] + " ");}System.out.println();
}
?
6.二維數組元素的默認初始化值
- 二維數組分為外層數組的元素,內層數組的元素
- int[][] arr = new int[4][3];
- 外層元素:arr[0],arr[1]等
- 內層元素:arr[0][0],arr[1][2]等
- ??數組元素的默認初始化值
- 針對于初始化方式一:比如:int[][] arr = new int[4][3];
- 外層元素的初始化值為:地址值
- 內層元素的初始化值為:與一維數組初始化情況相同
- 針對于初始化方式二:比如:int[][] arr = new int[4][];
- 外層元素的初始化值為:null
- ?內層元素的初始化值為:不能調用,否則報錯。
四、數組的常見算法
1. 數組的創建與元素賦值:
//楊輝三角// 1.新建二維數組,動態初始化int [][]yanghui=new int[10][];// 2. 為二維數組賦值for (int i = 0; i < yanghui.length; i++) {yanghui[i]=new int[i+1]; // 為其余元素賦值for (int j = 1; j < yanghui[i].length; j++) {//yanghui[i][j] = j;}}// 3.打印輸出二維數組for (int[] ints : yanghui) {for (int j = 1; j < ints.length; j++) {// 第0個位置沒有元素System.out.print(ints[j] + " ");}System.out.println();}
運行結果:?
1?
1 2?
1 2 3?
1 2 3 4?
1 2 3 4 5?
1 2 3 4 5 6?
1 2 3 4 5 6 7?
1 2 3 4 5 6 7 8?
1 2 3 4 5 6 7 8 9?
2. 針對于數值型的數組:
最大值、最小值、總和、平均數等
// 1.找到數組中的最大值
int maxArr = arr[0];
for (int i = 0; i < arr.length; i++) {if (maxArr < arr[i]) {maxArr = arr[i];}
}
System.out.println("數組中的最大值為:" + maxArr);// 2.找到數組中的最小值int minArr = arr[0];
for (int i = 0; i < arr.length; i++) {if (minArr > arr[i]) {minArr = arr[i];}
}
System.out.println("數組中的最小值為:" + minArr);// 3.找到數組中的平均數
int num = 0;
for (int i = 0; i < arr.length; i++) {num += arr[i];
}
System.out.println("數組的平均數為:" + (num / arr.length));// 4.求總和
int num1 = 0;
for (int i = 0; i < arr.length; i++) {num1 += arr[i];
}
System.out.println("數組的總和為:" + num1);
3. 數組的賦值與復制
// 1.數組的賦值
String[] str1 = new String[5];
str1 = str;
str1[2] = "AA";
for (int i = 0; i < str1.length; i++) {System.out.print(str[i] + " ");
}
System.out.println();
如何理解:將array1保存的數組的地址值賦給了array2,使得array1和array2共同指向堆空間中的同一個數組實體。
// 1.1數組的復制
for (int i = 0; i < str1.length; i++) {str1[i] = str[i];System.out.print(str1[i] + " ");
}
4.數組中指定元素的查找:搜索,檢索
4.1 線性查找:
實現思路:通過遍歷的方式,一個一個的數據進行比較、查找。 適用性:具有普遍適應性
4.2 二分法查找:
實現思路:每次比較中間值,折半的方式檢索。 適用性:(前提:數組必須有序)
五.數組的排序算法
十大排序算法
-
選擇排序:
- 直接選擇排序、堆排序
-
交換排序:
- 冒泡排序、快速排序
-
插入排序:
- 直接插入排序、折半插入排序、希爾排序
-
歸并排序
-
桶排序
-
基數排序
衡量排序算法的優劣:
? 時間復雜度、空間復雜度、穩定性