一、認識數組
1、容器的概念
用於存儲數據的一塊內存稱為容器,生活中有很多容器,例如水杯,衣櫃,以及存放“東西”
存放在容器中的數據,稱為“元素”
2、為什么會存在數組呢?
假如現在存儲全班同學的成績,全班40人,按照定義變量的思維,需要定義40個double類型的數據變量,每次從40個變量中找一個變量,操作很麻煩,java中可以定義以和數據類存放40個人的成績,使用數據類型存儲
數組定義:它是相同數據類型的有序集合
3、數據特點
-
數組的長度固定(數據的長度一旦聲明,就不能改變)
-
數組中存儲的元素數據類型必須相同
-
數組的元素 通過下標訪問,且下標默認從0開始
-
數組類型屬於引用數據類型,數組的元素類型 既可以是基本數據類型也可以是引用數據類型
4、數組的創建方式
方式一
數組存儲的數據類型 [] 數組名 = new 數組存儲的數據類型 [長度]
詳解:
數組存儲的數據類型:創建數組容器中可以存儲說明數據類型(基本數據類型、引用數據類型)
[]:表示數組
數組名:給數組起名字,遵循標識符規則
new:創建數組的關鍵字
[長度]:數組的長度,這個長度定義后不可改變 可表示為array.length
例如
int [] arr = new int[3];
new出來的空間在堆內存中,數組是引用數據類型,存在內存地址
內存解析:在堆內存中開票一段連續的3個長度的int類型的內存空間,並由arr變量指向這塊內存地址(換句話說rr輸出就是這個內存的地址)
方式二
數據類型 [] 數組名 = new 數據類型 []{元素1,元素2,元素3.。。。。 }
這里的數組長度就是元素的個數自動分配大小
int[] arr = new int[]{99 .97 .95};
或者
int arr [] = new int[]{90,95,96,94}
方式三
數據類型 [] 數組名 = {元素1,元素2,元素3.。。}
注意:這里的元素類型必須滿足數組的元素數據類型
char [] arr = {'a','b','c'}
或者
char arr [] = {'a','b','c'}
5、數組的訪問
數組的訪問通過索引訪問
索引(下標):每一次數組的元素都有一個編號,這個編號從0開始,這個編號稱為數組的索引,通過數組名[索引]訪問到數組的元素
例如:訪問數組的第二個元素:數組名[1];
數組的長度:數組的長度聲明以固定,訪問數組的長度:數組名.length
數組的最大索引 = 數組長度 - 1
數組元素的賦值:通過索引可以給元素賦值 數組名[索引] = 值 將數據賦值給指定索引的元素
二、動態數組
1、數組的定義
用於存儲相同數據類型的一組連續的存儲空間
2、 數組的特點
數組的長度一旦定義,則不可改變
訪問數組元素需要通過下標(索引)訪問,下標從零開始
數組是引用數據內存,內存分布在堆內存中,數組的變量存儲在內存地址
3、動態數組
由於數組的長度定義后不能改變,所謂“動態數組”是可以增加數據長度,所以java實現動態數組是改變數組變量指向不同的內存地址,本質並沒有將數組的長度改變
動態數組的本質:將內存空間的改變,以及指向數組內存地址的改變
操作1:數組添加新元素,可添加在最后面,也可以添加到指定位置
/**
* 添加元素,(添加到末尾)
*/
public static int[] addEle(int []array ,int num){
//初始數組 添加的元素
// int array [] = {10,9,3,2,1};
//1、創建臨時數組的長度
int [] tempArray = new int[array.length+1];
//2\將目標數組的元素 copy到 臨時數組的內存中
for (int i=0;i<array.length;i++){
tempArray[i]=array[i];
}
//3、將添加的元素放入臨時數組中
tempArray[tempArray.length-1]=num;
//4、將目標數組的地址 指向 臨時數組的地址
array=tempArray; //由於tempArray 是局部變量 方法執行完內存自動回收
// 如果不返回 沒有地址指向tempArray的內存
// 如果返回並接受 說明這塊內存地址仍然使用
return array;
}
/**
* 將元素num 添加到指定index的位置
* @param args
*/
public static int [] addEle(int [] arr,int num,int index){
//1、創建臨時數組的大小
int [] tempArray = new int[arr.length+1]
//2、便利arr
for(int i=0;i<=arr.length;i++){
//如果i<index
if (i<index){
tempArray[i]=arr[i];
}else if (i==index){
tempArray[i]=num;
}else{
//i>index
tempArray[i]=arr[i-1];
}
}
//賦值
arr=tempArray;
return arr;
}
public static void main(String[] args) {
//擴容數組
// int [] array = {5,4,3};
// //動態擴容一個
// array=addEle(array,2);
// for (int i=0;i<array.length;i++){
// System.out.println(array[i]);
// }
// System.out.println(array.length);
//插入到指定下標
int[]arrary={10,9,3,2,1};
arrary = addEle(arrary,5,5);
System.out.println(Arrays.toString(arrary)); // 直接輸出數組的每一個元素
}
操作2:可刪除元素 刪除指定下標元素
/**
* 刪除指定下標的數組元素,刪除后面的向前縮進一個
*/
public static int [] Ele(int arr[],int index){
//1、創建一個新的臨時數組
int tempArray [] =new int[arr.length-1];
for (int i=0;i<arr.length-1;i++){
if (i<index){
tempArray[i]=arr[i];
}else {
tempArray[i]=arr[i+1];
}
//i=3 temparray[3]=arr[4];
//i=4 temparray[4]=arr[4+5];
}
//賦值
arr=tempArray;
return arr;
}
public static void main(String[] args) {
int array []={10,5,4,7,8,6};
array=Ele(array,3);
System.out.println(Arrays.toString(array));
}
三、二維數組
1、二維數組定義
在一維數組中定義每一個元素也是一個數組元素,這樣的數組稱為“二維數組”多維數組就是在一維數組上再次定義二維數組或 三位數組 等。
一維數組定義
int [] array = { 1, 2 , 3}
二維數組定義
//定義三個長度的二維數組,其數組的每一個元素是一個一維數組
int [][] arrays = {{} ,{} ,{}} ;
或者
int [][] arrays = new int [3][2]; // 左邊的【】中表示二維數組的長度 ,其中2可以省略,3 不能省略
// 注意: 等號左邊有幾個【】 就表示幾維
// 1、定義二維數組
int [][] array;
// 定義時給二維數組賦值 3個長度的二維數組 里面的一維數組的長度不一定相等
int [][] array2 = {{1,2,3},{4,5},{7,8}};
// 定義時只指定大小 不給定初始值
int [][] array3 = new int[3][]; // 等價 {{},{},{}}
// array3[0][0]=1; // 賦值時 空指針異常 ,因為里面的一維數組是空的
//定義一個3個長度的二維數組,里面的元素長度是2
int array4 [][] = new int[3][2];
//給元素賦值
array4[0][0] =1;
// 輸出二維數組中的所有元素
for(int i=0;i<array4.length;i++){
// System.out.println(array4[i]);
for(int j=0;j<array4[i].length;j++){
System.out.println(array4[i][j]);
}
}
2、二維數組的應用
1、定義5*5的矩陣,計算最大值最小值
2、五子棋游戲