1. 數(shù)組的概念
數(shù)組可以理解為是一個(gè)巨大的“盒子”,里面可以按順序存放多個(gè)類(lèi)型相同的數(shù)據(jù),比如可以定義 int 型的數(shù)組 scores 存儲(chǔ) 4 名學(xué)生的成績(jī)。

2. 一維數(shù)組的聲明和使用
2.1 一維數(shù)組的聲明和初始化
- 聲明
int[] a;
或
int a[];
推薦使用第一種方式
- 初始化
數(shù)組的特點(diǎn):定長(zhǎng)的,初始化后不可更改長(zhǎng)度,要求在初始化時(shí)必須指定長(zhǎng)度(最大存儲(chǔ)量)
示例1:聲明了一個(gè)可以最多存儲(chǔ)5個(gè)數(shù)字的數(shù)組,此時(shí)沒(méi)有指定具體數(shù)字,int類(lèi)型默認(rèn)值為0,數(shù)組中相當(dāng)于存儲(chǔ)了5個(gè)“0”。
int[] a = new int[5];
示例2:聲明了一個(gè)可以最多存儲(chǔ)5個(gè)數(shù)字的數(shù)組,此時(shí)指定了具體的數(shù)字分別是1,2,5,12和7
int[] b = {1,2,5,12,7};
int[] c = new int[]{1,2,5,12,7};
2.2 一維數(shù)組的訪問(wèn)
需要通過(guò)下標(biāo)去訪問(wèn)數(shù)組中的某個(gè)元素
下標(biāo):從0開(kāi)始,下標(biāo)最大值是(數(shù)組的長(zhǎng)度-1) [0, 最大長(zhǎng)度-1]
示例3:查看數(shù)組中的第2個(gè)元素
System.out.println(a[1]);
示例4:修改數(shù)組中的第4個(gè)元素的值為35
a[3] = 35;
如果使用了一個(gè)超過(guò)下標(biāo)范圍的數(shù)字作為數(shù)組下標(biāo)使用,代碼會(huì)發(fā)生問(wèn)題。
比如長(zhǎng)度是5的數(shù)組a,最大下標(biāo)是4,訪問(wèn)a[5]就會(huì)發(fā)生下述異常

java.lang.ArrayIndexOutOfBoundsException:數(shù)組下標(biāo)越界異常
2.3 遍歷數(shù)組
訪問(wèn)數(shù)組中的所有元素
數(shù)組屬性 a.length 表示數(shù)組的長(zhǎng)度
int[] a = {23,12,11,15,28,42,31,55,8,17,12};
for(int i = 0; i < a.length; i++) {
System.out.println(a[i]);
}
示例5:給定數(shù)組 {23,12,11,15,28,42,31,55,8,17,12},請(qǐng)計(jì)算平均值
int[] a = {23,12,11,15,28,42,31,55,8,17,12};
int sum = 0;
for(int i = 0; i < a.length; i++) {
sum += a[i];
}
int avg = sum / a.length;
System.out.println(avg);
示例6:找到數(shù)組中的最小值
int[] a = {23,12,11,15,28,42,31,55,8,17,12};
int min = a[0];
for(int i = 1; i < a.length; i++) {
if(a[i] < min) {
min = a[i];
}
}
System.out.println(min);
3. 多維數(shù)組的聲明和使用(了解)
多維數(shù)組可以理解為:
二維數(shù)組是一種類(lèi)似“表結(jié)構(gòu)”
三維數(shù)組是一種類(lèi)似“空間結(jié)構(gòu)”
更高維的數(shù)組在現(xiàn)實(shí)世界中很少意義
實(shí)際上,多維數(shù)組是:數(shù)組類(lèi)型的數(shù)組
以二維數(shù)組為例理解多維數(shù)組的概念
3.1 二維數(shù)組的聲明和初始化
3.1.1 二維數(shù)組的聲明
int[][] a;
或
int a[][];
或
int[] a[];
推薦使用第一種方式聲明二維數(shù)組
3.1.2 二維數(shù)組的初始化
指定第一維的長(zhǎng)度和第二維的長(zhǎng)度
int[][] a = new int[3][4];
指定第一維的長(zhǎng)度而不指定第二維的長(zhǎng)度
int[][] a = new int[3][];
不允許在未指定第一維時(shí),直接指定第二維
不允許兩個(gè)維度的長(zhǎng)度都不指定
下面這個(gè)是一個(gè)錯(cuò)誤的示例
int[][] a = new int[][4]; //錯(cuò)誤示例??!
int[][] a = new int[][]; //錯(cuò)誤示例?。?/p>
可以直接數(shù)字的初始化,初始化了一個(gè)3x4的數(shù)組
第一維的長(zhǎng)度為3,第二維的長(zhǎng)度為4
int[][] a = {{1,2,3,4},{5,6,7,8},{1,4,2,8}};
| 1 | 2 | 3 | 4 |
| 5 | 6 | 7 | 8 |
| 1 | 4 | 2 | 8 |
初始化一個(gè)“鋸齒數(shù)組”
int[][] a = {{1,2,3},{5,6,7,8,9},{1,4,2,8}};
int[][] d = new int[][]{{1,2,3},{5,6,7,8,9},{1,4,2,8}};
| 1 | 2 | 3 | ||
| 5 | 6 | 7 | 8 | 9 |
| 1 | 4 | 2 | 8 |
3.2 二維數(shù)組的遍歷
二維數(shù)組a中
a.length得到第一維長(zhǎng)度、
a[i].length對(duì)應(yīng)的二維長(zhǎng)度
int a[][] = {{1,2,3},{5,6,7,8,9},{1,4,2,8}};
for(int i = 0; i < a.length; i++) {//遍歷第一維
for(int j = 0; j < a[i].length; j++) {
System.out.print(a[i][j]);
System.out.print("\t");
}
System.out.println();
}
4. 數(shù)組的排序(重要)
一維數(shù)組的內(nèi)部排序
內(nèi)部排序指的是不借助其他數(shù)組完成數(shù)組內(nèi)部排序
4.1 冒泡排序法(重點(diǎn))
冒泡排序是一種穩(wěn)定排序,兩個(gè)相同數(shù)字的相對(duì)位置不會(huì)發(fā)生改變
所謂穩(wěn)定"{12(a),11,15,6,2,9,12(b),7}"
穩(wěn)定排序的結(jié)果一定是"{2,6,7,9,11,12(a),12(b),15}"
不穩(wěn)定排序結(jié)果不一定是這樣
數(shù)組中,相鄰兩個(gè)數(shù)進(jìn)行比較,較大數(shù)放在后面,不斷地進(jìn)行這個(gè)過(guò)程。最大的數(shù)就會(huì)被放到結(jié)尾(升序)
冒泡排序法一個(gè)數(shù)的示例圖

類(lèi)似地繼續(xù)地從頭冒第二個(gè)數(shù),第三個(gè)數(shù)...直到將所有的數(shù)字都放在合適的位置上
代碼:
int temp = 0;
for(int i = 1; i < a.length; i++) {
for(int j = 0; j < a.length-i; j++) {
if(a[j] > a[j+1]) {
temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
}