數(shù)組的概述
[是啥]數(shù)組:用來存儲一組相同類型數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu),數(shù)組變量名屬于引用類型數(shù)據(jù)
[存啥]數(shù)組中的元素可以是指定的任何一種數(shù)據(jù)類型(基本類型和引用類型)
[咋用]數(shù)組的每個元素對應(yīng)一個索引(下標(biāo)),可以通過索引訪問數(shù)組中的元素
[變與不變]數(shù)組被創(chuàng)建好之后,它的長度不能改變洋侨,但是數(shù)組中的各個元素的值可以被改變
數(shù)組注意事項
數(shù)組4要素
標(biāo)識符:即數(shù)組名稱,用來區(qū)分不同的數(shù)組
數(shù)組元素:數(shù)組中存放的數(shù)據(jù)
元素下標(biāo):數(shù)組中每個數(shù)據(jù)的編號,從0開始,用于訪問某個具體的元素
元素類型:聲明數(shù)組時指定的數(shù)據(jù)類型
2個注意點
數(shù)組中元素類型必須相同
數(shù)組一旦創(chuàng)建,長度不可改變
數(shù)組的聲明方式
數(shù)據(jù)類型 [ ?] 數(shù)組變量名; 或 數(shù)據(jù)類型 數(shù)組變量名[ ?];
數(shù)組元素的訪問
數(shù)組在聲明,創(chuàng)建(內(nèi)存中為之分配空間)后赞别,就可以訪問數(shù)組中的每個元素
單個元素:arrayName[index]
index 為數(shù)組元素下標(biāo)(索引),可以是整型常量或整型表達(dá)式配乓。如a[3], ?b[i], ?c[6*i]
遍歷訪問:循環(huán)訪問每個元素
普通循環(huán)
增強(qiáng)for循環(huán)
數(shù)組的length屬性可以獲取它的長度仿滔,例如:arr.length
索引值從0開始,且必須小于數(shù)組的長度犹芹,即0~n-1崎页,否則發(fā)生數(shù)組越界異常
常用的排序算法
冒泡排序
選擇排序
一數(shù)組
1數(shù)組的聲明、創(chuàng)建
//格式:類型[]數(shù)組名
//聲明了一個整型(int)數(shù)組腰埂,數(shù)組中的每個元素類型為int
int[]a;
//創(chuàng)建了一個數(shù)組對象飒焦,數(shù)組中包含10個元素
a=newint[10];
2數(shù)組的下標(biāo)
下標(biāo)從0開始,下標(biāo)范圍0 ~ n-1
//通過下標(biāo)訪問數(shù)組中相應(yīng)的元素
a[0] = 12;
a[1] = 23;
a[9] = 20;
3數(shù)組的初始化
靜態(tài)初始化
//大括號中有幾個值,創(chuàng)建的數(shù)組中就有幾個元素
int[]a= {1, 2, 3, 4};
int[]b=newint[]{2, 3, 4, 5, 6};
動態(tài)初始化
int[]d=newint[5];
4數(shù)組的遍歷
1)for遍歷
for(inti= 0;i< 4;i++){
System.out.println(a[i]);
}
2)增強(qiáng)的for遍歷
for(intv:a){
System.out.println(v);
}
5數(shù)組的內(nèi)存結(jié)構(gòu)(重點)
棧先進(jìn)后出的數(shù)據(jù)結(jié)構(gòu)
方法的局部變量存放在棧里屿笼,當(dāng)方法結(jié)束時牺荠,局部變量所占內(nèi)存被系統(tǒng)回收
堆
絕大多數(shù)對象存放在堆里
二數(shù)組排序
1選擇排序
針對待排序的元素,使用首元素與剩余的元素依次進(jìn)行比較驴一,將最大值或最小值放在首位置休雌。依次類推,直到所有待排序元素比較完畢肝断。
5個數(shù)杈曲,比較4輪
n個數(shù)比較,比較n-1輪
輪數(shù)i ? ?1 ?2 ?3 ?4
數(shù)據(jù)比較次數(shù)j ? 4 ?3 ?2 ?1 ? ? 5 - i
Int[] a
a[0]和a[1]…a[4]
a[1]和a[2]…a[4]
a[2]和a[3] a[4]
a[3]和a[4]
2冒泡排序
針對待排序的元素胸懈,相鄰的兩個元素依次進(jìn)行比較担扑,將最大值或最小值放在最后
n個元素,比較n-1輪
輪數(shù)i ? ?0 ?1 ?2 ?3
次數(shù)j ? ?4 ?3 ?2 ?1趣钱,j ?= ?5–1–i
int[] a;
a[0]和a[1] , ?a[1]和a[2] , ?a[2]和a[3] , ?a[3]和a[4]
a[0]和a[1] , ?a[1]和a[2] , ?a[2]和a[3]
a[0]和a[1] , ?a[1]和a[2]
a[0]和a[1]
三Arrays類
Java提供的工具類
//默認(rèn)升序
Arrays.sort(a);
//講數(shù)組內(nèi)容轉(zhuǎn)換為字符串形式
Stringstr= Arrays.toString(a);
//二分查找
//第一個參數(shù)涌献,待查找的數(shù)組,第二個參數(shù)羔挡,要查找的值
intindex= Arrays.binarySearch(a, 23);
四二維數(shù)組(了解)
存放數(shù)組的數(shù)組,數(shù)組中的元素為一個數(shù)組
int[][]arr=newint[2][3];
//數(shù)組中有兩個元素间唉,每個元素存放另外一個一維數(shù)組的地址
int[][]arr1=newint[2][];
arr1[0] =newint[3];
arr1[1] =newint[2];
//二維數(shù)組的靜態(tài)初始化
int[][]arr2= {{1, 2}, {3, 4}, {5}};
//二維數(shù)組的遍歷
for(inti= 0;i<arr2.length;i++){
for(int j= 0; j<arr2[ i ].lenght;j++){
System.out.print(arr2[i][j]);
}
System.out.println();
}
五可變參數(shù)
//可變參數(shù)绞灼, 類型...參數(shù)名稱
staticvoidadd(int...args){
//方法內(nèi)部當(dāng)做數(shù)組處理
intsum= 0;
for(inti= 0;i<args.length;i++){
sum+=args[i];
}
System.out.println(sum);
}