數(shù)組定義
數(shù)組是一種數(shù)據(jù)結(jié)構(gòu),是用來存儲同一數(shù)據(jù)類型的有序集合,并可以用下標索引訪問數(shù)組中的值。簡而言之就是開辟了一段連續(xù)的有具有索引的存儲單元。
唯一性:不可以存儲不同的數(shù)據(jù)類型。
快速訪問:可以通過下標 索引符號[ ] 快速訪問數(shù)據(jù)。
客戶端程序員未賦值,JVM會自動賦值(int自動賦值0,boolean自動賦值false,引用類型自動賦值null)
可以int [] a定義數(shù)組,也可以int a []定義數(shù)組 前者更符合java設(shè)計思想 后者是C程序員的習(xí)慣。
2.for each 循環(huán)
for each只讀取容器內(nèi)的數(shù)據(jù)而不會更改數(shù)據(jù)。
for(variable : collection) 語句塊,collection 這一集合表達式必須是一個數(shù)組或者是一個實現(xiàn)了 Iterable 接口的類對象.-----------《java核心技術(shù)》
3.數(shù)組初始化
int [] a={1,2,3,4,5,6,7,8,9};
int [] a =new int[9];
int [] a =new int[]{1,2,3,4,5,6,7,8,9};
new int {1,2,3,4,5,6,7,8,9,};//匿名初始化--------------------------《java核心技術(shù) | 》
small Primes = new int[] { 17, 19, 23, 29, 31, 37 }; 是 int [] anonymous = { 17, 19, 23, 29, 31, 37 };
smallPrimes = anonymous; 的簡寫形式--------------------------------《java核心技術(shù) | 》
6.數(shù)組的引用本質(zhì)其實就是指針(c/c++)
當我們定義兩個數(shù)組 int a1[]={1,2,3,4,5,6,7,8,9};
int b1[]={1,2,3,} //故意長度不相等
很明顯a這時候報了數(shù)組越界異常,這時候變量a指向了b1。(下圖虛線 是賦值語句的結(jié)果,a指向b1)
4.數(shù)組在內(nèi)存中存儲形式
4.1 int類型數(shù)組
以int [] a =new int[9];為例子,在棧內(nèi)存(stack)存放內(nèi)存開辟空間用來存放變量a它是堆內(nèi)數(shù)組的應(yīng)用并指向數(shù)組第一個地址 ,在堆(heap)開辟一段連續(xù)的內(nèi)存空間 且空間長度是int*9用于存放這九個int數(shù)據(jù)。
5.常用算法
5.1插入算法
public class Add{
public static void main(String[] args){
// 一個有序的數(shù)組,向該數(shù)組中添加一個元素,數(shù)組依然有序。
int[] arr = {1,3,7,9,12,20,0};
int t = 0;
// 【1】找位置
int loc = -1; // 表示t應(yīng)該添加到的位置
for(int i = 0;i<arr.length-1;i++){
if(arr[i] >= t){
loc = i;
break;
}
}
System.out.println("loc = "+loc);
if(loc < 0){ // 沒找到合適的位置
arr[arr.length-1] = t;
}else{
// 【2】依次后移
for(int j=arr.length-1;j>loc;j--){
arr[j] = arr[j-1];
}
// 【3】添加插入的值
arr[loc] = t;
}
// 驗證
for(int i = 0;i<arr.length;i++){
System.out.print(arr[i]+"\t");
}
}
}
5.2 刪除算法
5.3冒泡排序
public class Test10{
public static void main(String[] args){
// 對一個無序的數(shù)組進行排序
int[] arr = {10,5,3,4,2,9,7};
int tmp = 0;
for(int i=0;i<arr.length-1;i++){ // 外層控制趟數(shù)
for(int j=0;j<arr.length-1-i;j++){ // 兩兩比較
if(arr[j]>arr[j+1]){
tmp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = tmp;
}
}
}
for(int i=0;i<arr.length;i++){
System.out.print(arr[i]+"\t");
}
}
}