閱讀材料一:靜態(tài)檢查>5.數(shù)組和集合

Reading 1: Static Checking > Arrays and Collections

原文地址:https://courses.edx.org/courses/course-v1:MITx+6.005.1x+3T2016/courseware/Readings_Videos/01-Static-Checking/

數(shù)組和集合

讓我改變之前的冰雹計(jì)算讓其將序列儲(chǔ)存在數(shù)據(jù)結(jié)構(gòu)中而不是打印出來(lái).Java有兩種類列表類型供我們使用:數(shù)組和集合.

數(shù)組是另一種類型T的固定長(zhǎng)度的序列.例如,這里是如何定義一個(gè)數(shù)組變量和構(gòu)造一個(gè)數(shù)組值給他:int[] a =new int[100];

這個(gè)int[]數(shù)組類型包含了所有可能的數(shù)組值,但是一個(gè)特定的數(shù)組值一定確定,將不能改變其長(zhǎng)度了.數(shù)組類型的操作包括:

- 索引 a[2]

- 賦值 a[2] = 0

- 長(zhǎng)度 a.length(注意其和String.length()的區(qū)別,這不是一個(gè)方法調(diào)用,因此你不需要在后面加上括號(hào))

這是冰雹代碼用數(shù)組后的變化.我們開(kāi)始構(gòu)造數(shù)組,用一個(gè)索引值i去走完數(shù)組,在我們生成值的同時(shí)去儲(chǔ)存他們.


代碼1

這個(gè)做法中的一些事情應(yīng)該立刻感覺(jué)到不對(duì).什么是魔術(shù)數(shù)字100?我們嘗試一個(gè)數(shù)字n產(chǎn)生的序列長(zhǎng)度大于100怎么辦?這不適用于一個(gè)長(zhǎng)度大于100的數(shù)組.我們產(chǎn)生了一個(gè)bug.Java將靜態(tài)地?fù)渥降竭@個(gè)bug,還是動(dòng)態(tài)地,又或者根本發(fā)覺(jué)不了?順便一提,這類的bug--固定數(shù)組長(zhǎng)度溢出,曾經(jīng)在不安全的語(yǔ)言中普遍地采用,比如c和c++這種不進(jìn)行數(shù)據(jù)進(jìn)入runtime檢測(cè)的語(yǔ)言.他們必須為大量的網(wǎng)絡(luò)安全分支和網(wǎng)絡(luò)爬蟲(chóng)負(fù)責(zé).

讓我們用列表類型來(lái)替代固定長(zhǎng)度的數(shù)組.列表是另一種變量T的可變長(zhǎng)度序列.這是我們?nèi)绾味x一個(gè)列表類型和聲明一個(gè)列表變量:List?list=new ArrayList();

這里是其的一些操作:

- 索引 list.get(2)

- 賦值 list.set(2, 0)

- 長(zhǎng)度 list.size()

注意列表是一個(gè)接口,一個(gè)不能直接用new來(lái)構(gòu)造的類型,而是定義了一個(gè)列表必須有的操作.我們將在未來(lái)課程中關(guān)于抽象類型的內(nèi)容中再談到這一點(diǎn).ArrayList是一個(gè)類,一個(gè)提供了這些操作實(shí)現(xiàn)的實(shí)體類型.ArrayList不是唯一的列表類型的實(shí)現(xiàn),盡管它是最常用的一個(gè).LinkedList是另外一個(gè).在Java的API文檔中可以查到更多,你可以搜索"java API".必須知道API文檔,它們是你的朋友.("API"的意思是應(yīng)用程序接口,也是庫(kù)的近義詞).

注意到我們也寫(xiě)成了List<Integer>而不是List<int>.很不幸,我們不能用List<int>直接模擬int[].列表只知道和對(duì)象類型打交道,合不是基本類型.在Java中每個(gè)基本類型(寫(xiě)成小寫(xiě)的和被縮短了,比如int)都有一個(gè)相對(duì)應(yīng)的對(duì)象類型(寫(xiě)成大寫(xiě),全稱,比如Integer).Java要求我們用這些對(duì)象類型和給一個(gè)類型用角標(biāo)參數(shù)化.據(jù)我所知,這個(gè)要求的唯一原因是提醒程序員這點(diǎn)列表包含了對(duì)象,因此比基本類型用了更多的內(nèi)存.但是在其他環(huán)境,Java自動(dòng)在int和Integer中進(jìn)行轉(zhuǎn)換,因此我們可以寫(xiě)Integer i = 5,而不會(huì)報(bào)錯(cuò).

這是用列表類型寫(xiě)的冰雹序列:


代碼2

不僅僅更簡(jiǎn)單了,也更安全了,因?yàn)榱斜砜梢宰晕以龃蟮侥慵尤氲降臄?shù)量大小(當(dāng)然,直到你耗盡內(nèi)存).


迭代

一個(gè)for循環(huán)一步步走完了一個(gè)數(shù)組或者列表的每一個(gè)元素,類似于Python中那樣,通過(guò)稍微有些區(qū)別的語(yǔ)法.例如:


代碼3

你可以迭代完整個(gè)數(shù)組或者列表,你把列表?yè)Q成數(shù)組同樣的代碼也能使用.

Math.max()是Java API中一個(gè)很方便的方程.整個(gè)Math類都是這類很有用的方法--在網(wǎng)上搜索"java 8 Math",找到Java第八版的Math類文檔.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末沸停,一起剝皮案震驚了整個(gè)濱河市丙挽,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌滑肉,老刑警劉巖诉稍,帶你破解...
    沈念sama閱讀 218,036評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件赶熟,死亡現(xiàn)場(chǎng)離奇詭異茫负,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)翅楼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)尉剩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人犁嗅,你說(shuō)我怎么就攤上這事边涕。” “怎么了褂微?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,411評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵功蜓,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我宠蚂,道長(zhǎng)式撼,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,622評(píng)論 1 293
  • 正文 為了忘掉前任求厕,我火速辦了婚禮著隆,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘呀癣。我一直安慰自己美浦,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,661評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布项栏。 她就那樣靜靜地躺著浦辨,像睡著了一般。 火紅的嫁衣襯著肌膚如雪沼沈。 梳的紋絲不亂的頭發(fā)上流酬,一...
    開(kāi)封第一講書(shū)人閱讀 51,521評(píng)論 1 304
  • 那天币厕,我揣著相機(jī)與錄音,去河邊找鬼芽腾。 笑死旦装,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的摊滔。 我是一名探鬼主播阴绢,決...
    沈念sama閱讀 40,288評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼惭载!你這毒婦竟也來(lái)了旱函?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,200評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤描滔,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后踪古,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體含长,經(jīng)...
    沈念sama閱讀 45,644評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,837評(píng)論 3 336
  • 正文 我和宋清朗相戀三年伏穆,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了拘泞。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,953評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡枕扫,死狀恐怖陪腌,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情烟瞧,我是刑警寧澤诗鸭,帶...
    沈念sama閱讀 35,673評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站参滴,受9級(jí)特大地震影響强岸,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜砾赔,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,281評(píng)論 3 329
  • 文/蒙蒙 一蝌箍、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧暴心,春花似錦妓盲、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,889評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至脆诉,卻和暖如春甚亭,著一層夾襖步出監(jiān)牢的瞬間贷币,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,011評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工亏狰, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留役纹,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,119評(píng)論 3 370
  • 正文 我出身青樓暇唾,卻偏偏與公主長(zhǎng)得像促脉,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子策州,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,901評(píng)論 2 355

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

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法瘸味,類相關(guān)的語(yǔ)法,內(nèi)部類的語(yǔ)法够挂,繼承相關(guān)的語(yǔ)法旁仿,異常的語(yǔ)法,線程的語(yǔ)...
    子非魚(yú)_t_閱讀 31,631評(píng)論 18 399
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理孽糖,服務(wù)發(fā)現(xiàn)枯冈,斷路器,智...
    卡卡羅2017閱讀 134,656評(píng)論 18 139
  • Java 語(yǔ)言支持的類型分為兩類:基本類型和引用類型办悟。整型(byte 1, short 2, int 4, lon...
    xiaogmail閱讀 1,348評(píng)論 0 10
  • “可以接下這個(gè)單子么尘奏?”朋克坐在歐姆奇力大街的星點(diǎn)咖啡店,玻璃窗外的人流來(lái)來(lái)往往病蛉,他指著桌上的幾張人物照片炫加,對(duì)著面...
    糖點(diǎn)什么閱讀 380評(píng)論 0 0
  • 使我流下淚水的 不是現(xiàn)在的愁 使我念念不忘的 不是她的雙眸 未來(lái)還要看多懂 我念著你的舊 使我困惑不安的 是優(yōu)寡的...
    那只老貓閱讀 292評(píng)論 4 5