數組:引用數據類型,引用類型的數據都存放在堆中(String是引用類型)
數組特點:
1)數據存放在堆中,同一個數組內的元素在一塊連續的內存當中(可以通過下標對數組進行定位檢索,所以查詢效率很高)
2)數組大小是固定的
3)數組創建後會擁有默認值
數組的內存模型:
1)數組是存儲多個相同類型變量的對象,數組的所有元素都保存在堆內存中
2)創建一個數組就是在堆中創建一個數組對象
3)數組創建後立即擁有默認值
4)索引從0開始
5)連續分配
數組分類:
1)按照維度:
1-1)一維數組:
1-2)多維數組:
2)按照數據類型:
1-1)基本數據類型的數組:
2-2)引用數組類型的數組:
編寫一個數組的步驟:
1)聲明:
2)實例化:
3)賦值:
4)取值:
一維數組:
聲明:
數據類型[] 數組名;
實例化:
new 數據類型[長度];
new是內存分配操作符,所謂創建數組,就是在內存中弄個給數組分配空間
賦值:
1)默認初始值:(動態初始化)
整數型:0
浮點型:0.0
字符型:\u0000
布爾型:false
引用類型:null
2)顯式初始化:
for循環:
單個賦值:int temp=12;arr[0]=temp;
靜態初始化:
int[]arr={23,45,78};int[]arr=new int[]{23,4,578};
取值:
單個取值:temp=arr[0];
for循環:
foreach循環: 只能遍歷集合,是隻讀的
for(元素的數據類型 變量名: 集合名){循環體}
應用:
排序:
1)Arrays:Arrays.sort(數組名);只能對一維數組升序
2)冒泡排序:相鄰的兩個元素進行比較
3)選擇排序:在一組數中找最大或者最小值,找到後與第一個元素交換位置
多維數組:數組的數組
聲明:
數據類型[][] 數組名;
實例化:
new 數據類型[行數][列數];
鋸齒數組:
聲明
數據類型[][] 數組名;
實例化
new 數據類型[行數][];
數組的屬性:
1)length:
數組的長度,是隻讀的
引用類型的原理:
聲明一個數組只是在棧中分配內存,用來存放數組名和數組中元素的地址,並不實際存儲元素的值,聲明只是在棧中存放了數組的名字,而數組的值(地址)是null,當數組被實例化之後,在堆中給該數組分配一個內存空間來存放數組元素的數據(產生一個地址),這時候將堆中的數組的首地址賦值給棧中的數組的值,這時,棧中存放的是數組的名字和該數組在堆中的內存地址(所以是引用類型),數組中元素的值是存放在堆中的;(引用類型都是)