1.數組的由來:
// 變量聲明
int a = 1;
int b = 2;
int c = 3;
int d = 4;
...
int n = 20;
// 一個int類型4個字節,一個字節佔8位
a.字面引申:
看到上面的這些int數據,都是int類型,有人就想,既然都是一種類型,爲什麼不能把他們放在一起?用一個變量接收就行了,每一次還要取一個名字(a,b,c,d…),特別麻煩!!
b.通俗解釋:
課間操的時候,廣播員讓某某班趕緊下來,而不是一個一個叫學生名字,讓學生下來集合!
班級裏,每個學生都有座位號:
一個年級多個班:int-a班,long-b班
int[] a= {1,2,3,4,5,6,7,8,9,10}
long[] b = {11,12,13,14,15,16,17,18,19,20}
每個班級就像一個數組;
而且每個班的座位就只有那麼些個!!
數組的特點:
1.同類型元素
2.固定大小(座位有限)
位置有限,那麼ArrayList當然得順應民意出來咯,畢竟數組的長度有限沒那麼容易,解決問題也是不怎麼方便!!
理解不可擴容:因爲在創建數組的時候,你說你要3個位置,那麼計算機給你3個位置,第四個位置可能被別人申請走了,計算機不可能說,你申請3個位置,他給你多預留2個位置給你,以防你擴容用。想法是美好的,要是預留的位置你不用,那不是浪費了??
2.數組下標爲什麼從0開始:
int[] a = new int[5];
a.初步理解:
a.上面的int數組申請5片連續的空間地址,就像盜墓的機關門一樣,連續的!
b.盜墓的機關門,先看見第一個門,然後才能見到另一扇門,數組的空間和機關門類似,如圖:
c.第一扇門,爲了記住門,不迷路,於是你給門上弄了一個1001
的門牌號:1001門開了
d.闖過1001,你的腳踏入下一道門,爲了記住自己走過多少道門,只有每走一扇門,就在第一道門上累加:
第幾扇門 地址 索引 最終地址
第二扇門記做int[1]:1001 + 1 = 1002
類推:
第三扇門記做int[2]:1001 + 2 = 1003
第四扇門記做int[3]:1001 + 3 = 1004
第五扇門記做int[4]:1001 + 4 = 1005
回頭看:
第一扇門記做int[0]:1001 + 0 = 1001
發現規律:數組知道第一個位置地址後,後面的地址可以根據規律計算
b.加深理解:
int[0] = 100;
int[2] = 200;
//int 佔4個字節
假設數組中第一扇門的地址記做2001
那麼因爲int佔4字節,需要往下數3個位置 + 1001的位置儲存100這個值
那麼:2001 、2002、003、2004
這四個地址用來存儲100
- 這樣計算儲存地址的時候,很方便!!!
計算公式:儲存起始地址 = 原始地址 + 索引*字節 假設存放的是:int類型,原始int[0]的地址 = 1001 現在要存放100這個值,那麼計算機就會計算得知:1001 + 0*4 = 1001; 從1001位置開始(包含1001),數4個位置,存的就是 100
- 不用在門上一個一個的標記
數組內存分配之堆棧:https://blog.csdn.net/lcl19970203/article/details/54428358