java數組(Array):數組的下標,爲什麼從0開始(通俗理解)?

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
在這裏插入圖片描述

  1. 這樣計算儲存地址的時候,很方便!!!
    計算公式:儲存起始地址 = 原始地址 + 索引*字節
    
    假設存放的是:int類型,原始int[0]的地址 = 1001
    現在要存放100這個值,那麼計算機就會計算得知:1001 + 0*4 = 1001;
    從1001位置開始(包含1001),4個位置,存的就是 100
    
  2. 不用在門上一個一個的標記

數組內存分配之堆棧:https://blog.csdn.net/lcl19970203/article/details/54428358

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章