從零學(xué)java day3 第四章 數(shù)組

1.數(shù)組類型

數(shù)組是編程語言中最常見的一種數(shù)據(jù)結(jié)構(gòu)措拇,可用于存儲多個數(shù)據(jù)芹扭,每個數(shù)組元素存放一個數(shù)據(jù)芯肤,通澄示校可通過數(shù)組元素的索引來訪問數(shù)組元素遍略,包括為數(shù)組元素賦值和取出數(shù)組元素的值

理解數(shù)組:數(shù)組也是一種類型

java的數(shù)組要求所有的數(shù)組元素具有相同的數(shù)據(jù)類型慢味,因此在一個數(shù)組中,數(shù)組元素的類型是唯一的墅冷,即一個數(shù)組里只能存儲一種數(shù)據(jù)類型的數(shù)據(jù)纯路,而不能存儲多種數(shù)據(jù)類型的數(shù)據(jù)。

一旦數(shù)組的初始化完成寞忿,數(shù)組在內(nèi)存中所占的空間將被固定下來驰唬,因此數(shù)組的長度將不可改變,即使把某個數(shù)組元素的數(shù)據(jù)清空腔彰,但它所占的空間依然被保留叫编。


2.定義數(shù)組

java語言支持兩種語法格式來定義數(shù)組

type[] arrayName;

type arrayName[];?

對著兩種語法格式而言,通常推薦使用第一種格式霹抛,因?yàn)榈谝环N格式不僅具有更好的語意搓逾,而且具有更好的可讀性

數(shù)組是一種引用類型的變量,因此使用它定義一個變量時(shí)杯拐,僅僅標(biāo)識定義了一個引用變量霞篡,這個引用變量還未指向任何有效的內(nèi)存,因此定義數(shù)組時(shí)不能指定數(shù)組的長度端逼,而且由于定義數(shù)組只是定義了一個引用變量朗兵,并未指向任何有效的內(nèi)存空間,所以還沒有內(nèi)存空間來存儲數(shù)組元素顶滩,因此這個數(shù)組也不能使用余掖,只有對數(shù)組進(jìn)行初始化后才可以使用。

3.數(shù)組的初始化

java語言中數(shù)組必須先初始化礁鲁,然后才可以使用盐欺,所謂初始化,就是為數(shù)組的數(shù)組元素分配內(nèi)存空間仅醇,并為每個數(shù)組元素賦初始的值冗美。

數(shù)組的初始化有兩種方式:

靜態(tài)初始化:初始化時(shí)由程序員顯式指定每個數(shù)組元素的初始值,由系統(tǒng)決定數(shù)組長度着憨。

動態(tài)初始化:初始化時(shí)程序員只能指定數(shù)組長度墩衙,有系統(tǒng)為數(shù)組元素分配初始值。


靜態(tài)初始化語法格式如下:

arrayName = new type[] {element1.element2,element3....}

動態(tài)初始化語法格式如下:

arrayName = new type[length];

執(zhí)行動態(tài)初始化時(shí)程序員只需要指定數(shù)組的長度甲抖,即為每個數(shù)組元素指定所需的內(nèi)存空間漆改,系統(tǒng)將負(fù)責(zé)為這些數(shù)組元素分配初始值。

數(shù)組元素的類型是基本類型中的整數(shù)類型(byte准谚、short挫剑、int、long)則數(shù)組元素的值是0

數(shù)組元素的類型是基本類型中浮點(diǎn)類型(float柱衔、double)樊破,則數(shù)組元素的值是0.0

數(shù)組元素的類型是基本類型中字符類型(char)愉棱,則數(shù)組元素的值是'\u0000'

數(shù)組元素的類型是基本類型中布爾類型(boolean),則數(shù)組元素的值是null

4.使用數(shù)組

數(shù)組最常用的用法就是訪問數(shù)組元素哲戚,包括對數(shù)組元素進(jìn)行賦值和取出數(shù)組元素的值奔滑,訪問數(shù)組元素都是通過在數(shù)組引用變量后緊跟一個方括號[],方括號里是數(shù)組元素的索引值顺少,這樣就可以訪問數(shù)組元素了朋其,訪問到數(shù)組元素之后,就可以把一個數(shù)組元素當(dāng)成一個普通變量使用了脆炎,包括為該變量賦值和取出該變量的值梅猿,這個變量的類型就是定義數(shù)組時(shí)使用的類型。

java語言的數(shù)組索引是從0開始的秒裕,也就是說袱蚓,第一個數(shù)組元素的索引值為0,最后一個數(shù)組元素的索引值為數(shù)組長度減一几蜻,

如果訪問數(shù)組元素時(shí)指定的索引值小于0喇潘,或者大于等于數(shù)組的長度,編譯程序不會出現(xiàn)任何錯誤入蛆,但運(yùn)行時(shí)出現(xiàn)異常:java.lang.ArraryIndexOutOfBoundsException:N(數(shù)組索引越界異常)响蓉,異常信息后的N就是程序員試圖訪問的數(shù)組索引。

所有的數(shù)組都提供了一個length的屬性哨毁,通過這個屬性可以訪問到數(shù)組的長度,一旦獲得了數(shù)組的長度源武,就可以通過循環(huán)來遍歷該數(shù)組的每個數(shù)組元素扼褪。


5.foreach循環(huán)

從java5之后,java提供了一種更簡單的循環(huán):foreach循環(huán)粱栖,這種循環(huán)遍歷數(shù)組和集合话浇。使用foreach循環(huán)遍歷數(shù)組和集合元素時(shí),

闹究,無需獲得數(shù)組和集合的長度幔崖,無需根據(jù)索引來訪問數(shù)組元素和集合元素,foreach循環(huán)自動遍歷數(shù)組和集合的每個元素渣淤。

foreach循環(huán)的語法格式如下:

for(type variableName : array | collection)

{

//variableName 自動迭代訪問每個元素

}

foreach循環(huán)和普通循環(huán)不同的是赏寇,它無需循環(huán)條件,無需循環(huán)迭代語句价认,這些部分都由系統(tǒng)來完成嗅定,foreach循環(huán)自動迭代數(shù)組的每個元素,每當(dāng)元素都被迭代一次后用踩,foreach循環(huán)自動結(jié)束渠退。

6.深入數(shù)組

1)內(nèi)存中的數(shù)組

數(shù)組應(yīng)用變量是訪問堆內(nèi)存中數(shù)組元素的根本方式忙迁。

定義并初始化一個數(shù)組后,在內(nèi)存中分配了兩個空間碎乃,一個用于存放數(shù)組的引用變量姊扔,另一個用于存放數(shù)組本身。

2)基本類型數(shù)組的初始化

對于基本類型數(shù)組而言梅誓,數(shù)組元素的值直接存儲在對應(yīng)的數(shù)組元素中恰梢,因此初始化數(shù)組時(shí),先為該數(shù)組分配內(nèi)存空間证九,然后直接將數(shù)組元素的值存入對應(yīng)數(shù)組元素中删豺。

3)引用類型數(shù)組的初始化

每個數(shù)組元素里存儲的還是引用,它指向另一塊內(nèi)存愧怜,這塊內(nèi)存里存儲了有效數(shù)據(jù)呀页。

4)沒有多維數(shù)組

如果從數(shù)組底層的運(yùn)行機(jī)制上來看,沒有多維數(shù)組

java語言里的數(shù)組類型是引用類型拥坛,因此數(shù)組變量其實(shí)是一個引用蓬蝶,這個引用指向真實(shí)的數(shù)組內(nèi)褲才能。數(shù)組元素的類型也可以是引用猜惋,如果數(shù)組元素的引用再次指向真實(shí)的數(shù)組內(nèi)存丸氛,這種情形看上去很像多維數(shù)組。

java語言采用上面的語法格式來定義二維數(shù)組著摔,但它的實(shí)質(zhì)還是一維數(shù)組缓窜,只是其數(shù)組元素也是引用,數(shù)組元素里保存的引用指向一維數(shù)組谍咆。

7.java8增強(qiáng)的工具類:arrays

java提供的arrays類里包含的一些static修飾的方法可以直接操作數(shù)組禾锤,這個arrays類里包含了如下幾個static修飾的方法

int binarySearch(type[] a, type key):使用二分法查詢key元素值在a數(shù)組中出現(xiàn)的索引;如果a數(shù)組不包含key元素值摹察,則返回負(fù)數(shù)恩掷。調(diào)用該方法時(shí)要求數(shù)組中元素已經(jīng)按升序排列,這樣才能得到正確的結(jié)果供嚎。

int binarySearch(type[] a,int fromIndex,int toIndex ,type key):這個方法和前一個方法類似黄娘,但它只搜索a數(shù)組中fromIndex到toIndex索引的元素。調(diào)用該方法時(shí)要求數(shù)組中元素已經(jīng)按升序排列克滴,這樣才能得到正確的結(jié)果逼争。

type[] copyOf(type[] original,int length):這個方法將會把original數(shù)組復(fù)制成一個新數(shù)組,其中l(wèi)ength是新數(shù)組的長度偿曙。如果length小于original數(shù)組的長度氮凝,則新數(shù)組就是原數(shù)組的前面length個元素;

type[] copyOfRange(type[] original,int from,int to):這個方法與前面方法相似望忆,但這個方法只復(fù)制original數(shù)組的from索引到to索引的元素罩阵。

boolean equals(type[] a,type a2):如果a數(shù)組和a2數(shù)組的長度相等竿秆,而且a數(shù)組和a2數(shù)組的數(shù)組元素也一一相同,該方法將返回true稿壁。

void fill(type[] a, type val):該方法將會把a(bǔ)數(shù)組的所有元素都賦值為val幽钢。

void fill(type[] a,int fromIndex,int toIndex,type val)

void sort(type[] a)該方法對a數(shù)組進(jìn)行排序。

void sort(type[] a,int fromIndex,int toIndex)

String toString(type[] a):該方法將一個數(shù)組轉(zhuǎn)換成一個字符串傅是。該方法按順序把多個數(shù)組元素連綴在一起匪燕,多個數(shù)組元素使用英文逗號和空格隔開。

Arrays類處于java.util包下喧笔,為了在程序中使用Arrays類帽驯,必須在程序中導(dǎo)入java.util.Arrays類。

void parallelPrefix(xxx[] array,XxxBinaryOperator op):該方法使用op參數(shù)指定的計(jì)算公式計(jì)算得到的結(jié)果作為新的元素书闸。op計(jì)算公式包括left尼变、right兩個形參,其中l(wèi)eft代表數(shù)組中前一個索引處的元素浆劲,right代表數(shù)組中當(dāng)前索引處的元素嫌术,當(dāng)計(jì)算第一個新數(shù)組元素時(shí),left的值默認(rèn)為1

void setAll(xxx[] array,IntToXxxFunction generator):該方法使用指定的生成器為所有數(shù)組元素設(shè)置值牌借,該生成器控制數(shù)組元素的值得生成算法度气。

void paralleSetAll(xxx[] array,IntToXxxFunction generator):該方法的功能與上一個方法相同,只是該方法增加了并行能力膨报,可以利用多CPU并行來提高性能

void parallelSort(xxx[] a,int fromIndex,int toIndex):該方法與sort()方法相似磷籍,該方法增加了并行能力。

Spliterator.OfXxx spliterator(xxx[] array):將數(shù)組的所有元素轉(zhuǎn)換成對應(yīng)的Spliterator對象现柠。

XxxStream stream(xxx[] array):該方法將數(shù)組轉(zhuǎn)換為Stream,Stream是java8新增的流式編程的API

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末择示,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子晒旅,更是在濱河造成了極大的恐慌,老刑警劉巖汪诉,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件废恋,死亡現(xiàn)場離奇詭異,居然都是意外死亡扒寄,警方通過查閱死者的電腦和手機(jī)鱼鼓,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來该编,“玉大人迄本,你說我怎么就攤上這事】慰ⅲ” “怎么了嘉赎?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵置媳,是天一觀的道長。 經(jīng)常有香客問我公条,道長拇囊,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任靶橱,我火速辦了婚禮寥袭,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘关霸。我一直安慰自己传黄,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布队寇。 她就那樣靜靜地躺著膘掰,像睡著了一般。 火紅的嫁衣襯著肌膚如雪英上。 梳的紋絲不亂的頭發(fā)上炭序,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天,我揣著相機(jī)與錄音苍日,去河邊找鬼惭聂。 笑死,一個胖子當(dāng)著我的面吹牛相恃,可吹牛的內(nèi)容都是我干的辜纲。 我是一名探鬼主播,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼拦耐,長吁一口氣:“原來是場噩夢啊……” “哼耕腾!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起杀糯,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤扫俺,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后固翰,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體狼纬,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年骂际,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了疗琉。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡歉铝,死狀恐怖盈简,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤柠贤,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布香浩,位于F島的核電站,受9級特大地震影響种吸,放射性物質(zhì)發(fā)生泄漏弃衍。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一坚俗、第九天 我趴在偏房一處隱蔽的房頂上張望镜盯。 院中可真熱鬧,春花似錦猖败、人聲如沸速缆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽艺糜。三九已至,卻和暖如春幢尚,著一層夾襖步出監(jiān)牢的瞬間破停,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工尉剩, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留真慢,地道東北人。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓理茎,卻偏偏與公主長得像黑界,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子皂林,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內(nèi)容