1.數(shù)組簡(jiǎn)介
我們可以想一個(gè)問(wèn)題,如果現(xiàn)在讓你存儲(chǔ)100個(gè)學(xué)生的數(shù)學(xué)成績(jī),你該怎么存儲(chǔ)呢?難道要定義100個(gè)變量,每個(gè)變量代表一個(gè)學(xué)生的成績(jī)嗎?如果是存儲(chǔ)1000個(gè)、10000個(gè)、乃至更多學(xué)生的成績(jī)?cè)趺崔k?如果是定義一個(gè)個(gè)變量進(jìn)行存儲(chǔ),就太麻煩了,而且這也不符合項(xiàng)目開(kāi)發(fā)時(shí)對(duì)復(fù)用性、可讀性等方面的要求。所以我們肯定不能這么編程。那么現(xiàn)在解決的辦法,就是可以使用”數(shù)組“來(lái)進(jìn)行實(shí)現(xiàn)。
2.概念
所謂的數(shù)組(Array),就是數(shù)據(jù)的組合,簡(jiǎn)單地說(shuō)就是一個(gè)存儲(chǔ)容器,里面可以包含多個(gè)數(shù)據(jù)。該容器在內(nèi)存中開(kāi)辟了一塊連續(xù)的存儲(chǔ)空間,可以用來(lái)保存相同類型的多個(gè)數(shù)據(jù)。給大家舉個(gè)栗子,下圖的這個(gè)東西你見(jiàn)過(guò)嗎?

有的人說(shuō)這不是雞蛋嗎?其實(shí)壹哥想讓你看的是存儲(chǔ)這些雞蛋的”容器“--雞蛋托!一個(gè)雞蛋托有多個(gè)存儲(chǔ)格子,每個(gè)格子只能存儲(chǔ)一個(gè)雞蛋,并且這些格子只能用來(lái)存儲(chǔ)雞蛋,不能存儲(chǔ)其他的東西。一個(gè)雞蛋托可以存儲(chǔ)的雞蛋數(shù)量是有限的,不能無(wú)限存儲(chǔ)。
其實(shí)Java里的數(shù)組就類似于是”雞蛋托“,數(shù)組中存儲(chǔ)的數(shù)據(jù)元素就是一個(gè)個(gè)的”雞蛋“。一個(gè)數(shù)組占據(jù)了內(nèi)存中的一片連續(xù)空間,只能存儲(chǔ)相同類型的數(shù)據(jù),數(shù)組有一定的存儲(chǔ)空間。我們?cè)趧?chuàng)建數(shù)組時(shí),需要先聲明數(shù)組的類型,之后該數(shù)組中只能存儲(chǔ)指定類型的數(shù)據(jù)。
●我們把存儲(chǔ)在數(shù)組中的每一個(gè)數(shù)據(jù),稱為”數(shù)據(jù)元素“。這些數(shù)據(jù)元素會(huì)按著一定的順序排列存儲(chǔ),并賦予每個(gè)數(shù)據(jù)元素對(duì)應(yīng)的編號(hào)。我們可以直接通過(guò)編號(hào)(索引、下標(biāo))的方式來(lái)調(diào)用指定位置上的數(shù)據(jù)元素,查找速度會(huì)很快。
●數(shù)組本身是引用類型,但數(shù)組中的數(shù)據(jù)元素可以是任何數(shù)據(jù)類型,包括基本數(shù)據(jù)類型和引用數(shù)據(jù)類型。
●數(shù)組創(chuàng)建時(shí)需要指定一個(gè)名稱,并會(huì)在內(nèi)存中開(kāi)辟一整塊連續(xù)的內(nèi)存空間,數(shù)組名引用的就是這塊連續(xù)空間的首地址(第一個(gè)地址)。
●數(shù)組創(chuàng)建后,長(zhǎng)度一旦確定,就不能再被修改。

3.特點(diǎn)
●數(shù)組中保存的數(shù)據(jù),其數(shù)據(jù)類型必須是相同;
●數(shù)組的長(zhǎng)度是固定的,一旦定義,其長(zhǎng)度就不能被改變。
4.分類
Java里的數(shù)組,按照不同的標(biāo)準(zhǔn)可以有多種劃分方式。
●按照維度:一維數(shù)組、二維數(shù)組、多維數(shù)組;
●按照數(shù)據(jù)類型:基本類型元素的數(shù)組、引用類型元素的數(shù)組(即對(duì)象數(shù)組)。
5.默認(rèn)值
數(shù)組本身是引用類型,它的元素相當(dāng)于是類的成員變量,因此數(shù)組一經(jīng)分配內(nèi)存空間,其中的每個(gè)元素也會(huì)按照成員變量的方式被進(jìn)行隱式初始化。這些不同類型的數(shù)據(jù)元素有著自己對(duì)應(yīng)的默認(rèn)值:
●整型數(shù)組默認(rèn)值:0;
●浮點(diǎn)型數(shù)組默認(rèn)值:0.0;
●布爾類型數(shù)組默認(rèn)值:false;
●字符型數(shù)組默認(rèn)值:0 或者' '或者 '\u0000';
●引用類型數(shù)組默認(rèn)值:null。
其中null是一種特殊的值,表示當(dāng)前對(duì)象在內(nèi)存中沒(méi)有指向任何的地址。而""表示一個(gè)空字符串,在內(nèi)存中是有對(duì)應(yīng)的內(nèi)存地址的。
6.數(shù)組長(zhǎng)度
每個(gè)數(shù)組都有一個(gè)length屬性,代表它的長(zhǎng)度(元素個(gè)數(shù))。例如arr.length指明數(shù)組arr的長(zhǎng)度。數(shù)組一旦初始化,其長(zhǎng)度就是不可變的。
7.數(shù)組元素的引用
我們?cè)诙x并用new運(yùn)算符創(chuàng)建數(shù)組之后,才可以引用數(shù)組中的每個(gè)元素。引用數(shù)據(jù)元素的方式是:
數(shù)組名[數(shù)組元素下標(biāo)]
其中數(shù)組元素的下標(biāo)也叫做索引。數(shù)組元素的下標(biāo)可以是整型常量或整型表達(dá)式,如a[3]、b[i]、c[6*i]。另外數(shù)組元素的下標(biāo)從0開(kāi)始,所以一個(gè)長(zhǎng)度為n的數(shù)組,其合法的下標(biāo)取值范圍是 0 —>n-1。如int a[]=new int[3]; 可引用的數(shù)組元素是a[0]、a[1]、a[2]。