20172313 2017-2018-2 《程序设计与数据结构》第十周学习总结
20172313 2017-2018-2 《程序設(shè)計與數(shù)據(jù)結(jié)構(gòu)》第十周學(xué)習(xí)總結(jié)
教材學(xué)習(xí)內(nèi)容總結(jié)
學(xué)習(xí)動態(tài)結(jié)構(gòu),初步學(xué)習(xí)鏈表中的增刪查改。
了解Java集合類API是由Java類庫中定義的幾種表示不同類型集合的類。
了解泛型:一個集合所管理的對象的類型要在實例化該集合對象時才確定,保證了集合中對象類型的兼容性。
教材學(xué)習(xí)中的問題和解決過程
- 問題1:集合是一種對象,對象適用于定義集合,書上說集合和抽象數(shù)據(jù)類型是可以互換的等同概念,那么為什么對象特別適用于實現(xiàn)抽象數(shù)據(jù)類型。
- 問題1解決方案:抽象數(shù)據(jù)類型(ADT)是一個包含數(shù)據(jù)和施加在這些數(shù)據(jù)上的操作的集合。對象實際上就是將變量和相關(guān)的方法封裝在一起的實體。對象隱藏了ADT背后的實現(xiàn)細(xì)節(jié),并且將借口和底層的實現(xiàn)相分離,使得實現(xiàn)發(fā)生變化后并不影響接口。
- 問題2:ArrayList是一種異構(gòu)集合,那么ArrayList類提供抽象數(shù)據(jù)類型嗎?
- 問題2解決方案:ArrayList類提供抽象數(shù)據(jù)類型。ArrayList類提供一個信息集合,并提供保存和訪問信息的操作,而實現(xiàn)的細(xì)節(jié)對我們來說是隱藏的。也就是說,當(dāng)時用一個ArrayList對象時,不需要知道他存放的數(shù)據(jù)是什么或著操作是如何實現(xiàn)的。
- 問題3:不理解鏈表中指針的是如何定義的,指針的使用也不是很清楚。
問題3解決方案:
Java語言中的對象引用實際上是一個指針(這里的指針均為概念上的意義,而非語言提供的數(shù)據(jù)類型),所以我們可以編寫這樣的類來實現(xiàn)鏈表中的結(jié)點。
程序代碼:
class Node
{
Object data;
Node next;//指向下一個結(jié)點
}
將數(shù)據(jù)域定義成Object類是因為Object類是廣義超類,任何類對象都可以給其賦值,增加了代碼的通用性。為了使鏈表可以被訪問還需要定義一個表頭,表頭必須包含指向第一個結(jié)點的指針和指向當(dāng)前結(jié)點的指針。為了便于在鏈表尾部增加結(jié)點,還可以增加一指向鏈表尾部的指針,另外還可以用一個域來表示鏈表的大小,當(dāng)調(diào)用者想得到鏈表的大小時,不必遍歷整個鏈表。
鏈表的數(shù)據(jù)結(jié)構(gòu)我們可以用類List來實現(xiàn)鏈表結(jié)構(gòu),用變量Head、Tail、Length、Pointer來實現(xiàn)表頭。存儲當(dāng)前結(jié)點的指針時有一定的技巧,Pointer并非存儲指向當(dāng)前結(jié)點的指針,而是存儲指向它的前趨結(jié)點的指針,當(dāng)其值為null時表示當(dāng)前結(jié)點是第一個結(jié)點,因為當(dāng)刪除當(dāng)前結(jié)點后仍需保證剩下的結(jié)點構(gòu)成鏈表,如果Pointer指向當(dāng)前結(jié)點,則會給操作帶來很大困難。如何得到當(dāng)前結(jié)點呢?我們定義了一個方法cursor(),返回值是指向當(dāng)前結(jié)點的指針。類List還定義了一些方法來實現(xiàn)對鏈表的基本操作,通過運用這些基本操作我們可以對鏈表進(jìn)行各種操作。例如reset()方法使第一個結(jié)點成為當(dāng)前結(jié)點。insert(Objectd)方法在當(dāng)前結(jié)點前插入一個結(jié)點,并使其成為當(dāng)前結(jié)點。remove()方法刪除當(dāng)前結(jié)點同時返回其內(nèi)容,并使其后繼結(jié)點成為當(dāng)前結(jié)點,如果刪除的是最后一個結(jié)點,則第一個結(jié)點變?yōu)楫?dāng)前結(jié)點。
代碼調(diào)試中的問題和解決過程
- 問題1:一開始做對鏈表的增刪查改的時候,由于對概念的理解不清,直接令兩個對象進(jìn)行比較,導(dǎo)致比較的結(jié)果與實際不符,也就進(jìn)而導(dǎo)致了刪除鏈表節(jié)點不成功。
問題1解決方案:在Java中,除了值類型,另外還有一種引用類型,而不同的對象,其引用值其實并不相等,即在內(nèi)存中的不同的地址單元中。比如我們定義了學(xué)生類,分別有兩個學(xué)生對象實例 :
Student stu= new Student(); Student stu1= new Student();
此時我們無論是使用stu==stu1符號,或者stu.equals(stu1)方法,把兩個對象進(jìn)行比較,得到的結(jié)果都是不相等的,因為對于引用類型來說,默認(rèn)是比較兩個對象引用的地址,顯示,每個對象的引用有自己唯一的地址,所以,是不相等。把對象中所儲存的內(nèi)存地址中的值轉(zhuǎn)化為字符串類型的在進(jìn)行比較就可以了。
代碼托管
上周考試錯題總結(jié)
- 錯題1: An exception that could also arise in the try statement that does not have an associated catch statement is
A . ClassNotFoundException
B . IllegalArgumentException
C . NegativeArraySizeException
D . NullPointException
E . OutOfMemoryException - 解析 如果數(shù)組尚未實例化,那么i3將拋出NullPointerException。 ClassNotFoundException,IllegalArgumentException和OutOfMemoryException不會被拋出,因為try語句中沒有代碼引用某個未知類,使用參數(shù)或處理新內(nèi)存的生成。 NegativeArraySizeException僅在實例化數(shù)組時出現(xiàn)。
- 錯因分析:在做測試的時候還未徹底的學(xué)習(xí)課本,導(dǎo)致概念理解不清。
- 錯題2: Which of the following is not true of the RuntimeExceptions class?
A . All RuntimeExceptions throw checked exceptions
B . All RuntimeExceptions are Throwable objects
C . RuntimeException has child classes ArithmeticException and NullPointerException
D . RuntimeException objects are not Error objects
E . All of the above are true - 解析 B,C和D中的答案都是正確的,RuntimeExceptions是Throwable對象,不是Error類的一部分,兩種類型的RuntimeException是ArithmeticException和NullPointerException。不是RuntimeException的異常包括各種檢查的異常,但RuntimeException不是檢查異常。
- 錯因分析:自己粗心大意,對題一理解不清導(dǎo)致錯誤。
- 錯題3: If an exception is thrown and is not caught anywhere in the program, then the program terminates.
A . true
B . false - 解析 異常是interest的事件,或者是沒有異常處理程序就無法正常處理的運行時情況。異常被關(guān)聯(lián)的異常處理程序捕獲。如果拋出異常但未處理,則程序必須終止。
- 錯因分析:對異常的概念理解混淆。
- 錯題4: A try statement must have at least one catch statement, but could have many catch statements, and may or may not have a finally clause.
A . true
B . false - 解析 所有的try語句都必須至少有一個catch語句,或者沒有理由擁有try語句。對于可能引發(fā)的每種類型的異常,可以有一個catch語句。程序員可以指定盡可能多的catch語句。此外,try語句可能有一個finally子句,但不需要一個。
- 錯因分析:對異常的捕獲概念理解不清。
- 錯題5: If an exception arises in a catch statement, and the exception is of the type caught by the catch statement, then the catch statement catches the same exception. For instance, if the following catch statement first catches an ArithmeticException and, while executing, throws another ArithmeticException, it is able to catch the second ArithmeticException as well the first.
catch (ArithmeticException ex) {...}
A . true
B . false - 解析 異常會導(dǎo)致當(dāng)前語句停止執(zhí)行并控制外部傳送到第一個catch(在當(dāng)前語句之后)可以捕獲異常的傳輸。 因此,catch語句不會捕獲從它自身內(nèi)部拋出的異常,盡管catch語句可以在其中嵌套額外的try和catch語句。
- 錯因分析:在學(xué)習(xí)異常的傳遞的時候,沒弄清異常傳遞的真正定義是什么,再犯了這個錯誤后,一定要好好記住!
結(jié)對及互評
- 博客中值得學(xué)習(xí)的或問題:
- 排版精美,對于問題研究得很細(xì)致,解答也很周全。
- 代碼中值得學(xué)習(xí)的或問題:
- 代碼寫的很規(guī)范,思路很清晰,繼續(xù)加油!
點評過的同學(xué)博客和代碼
- 本周結(jié)對學(xué)習(xí)情況
- 20172332
- 20172326
- 結(jié)對學(xué)習(xí)內(nèi)容
- 第13章 集合
其他(感悟、思考等,可選)
有一個問題一直困擾著我,那就是自己到底為什么而讀書,為什么而學(xué)習(xí),這些天正好看到一段話,現(xiàn)放到這里予自己以共勉。
作者:孫在在
鏈接:https://www.zhihu.com/question/40683692/answer/90861351
來源:知乎
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。
我感到害怕。就像我們不知道冬天從哪天開始,只會感覺夜的黑越來越漫長。我害怕一跟他們談話,我就像一個透明的人,蒼白的腦袋無法隱藏。我所擁有的內(nèi)涵是什么?不就是人人能脫口而出,游蕩在空氣中最通俗的認(rèn)知嗎?像心臟在身體的左邊。春天之后是夏天。美國總統(tǒng)是世界上最有權(quán)力的人。但閱讀的人在知識里遨游,能從食譜論及管理學(xué),八卦周刊講到社會趨勢,甚至空中躍下的貓,都能讓他們對建筑防震理論侃侃而談。相較之下,我只是一臺在MP3世代的錄音機(jī),過氣、無法調(diào)整。我最引以為傲的論述,恐怕只是他多年前書架上某本書里的某段文字,而且,還是不被熒光筆畫線注記的那一段。我害怕,當(dāng)他們讀書時,臉就藏匿在書后面。書一放下,就以貴族王者的形象在我面前閃耀。舉手投足都是自在風(fēng)采。讓我明了,那不只是知識,更是魔力。他們是懂美學(xué)的牛頓。懂人類學(xué)的梵谷。懂孫子兵法的甘地。血液里充滿答案,越來越少的問題能讓他們恐懼。彷佛站在巨人的肩牓上,習(xí)慣俯視一切。那自信從容,是這世上最好看的一張臉。我害怕,我祈禱他們永遠(yuǎn)不知道我的不安,免得他們會更輕易擊垮我,甚至連打敗我的意愿都沒有。我如此害怕,因為他們的榜樣是偉人,就算做不到,退一步也還是一個,我遠(yuǎn)不及的成功者。我害怕,他們知道「無知」在小孩身上才可愛,而我已經(jīng)是一個成年的人。我害怕,因為大家都喜歡有智慧人。我害怕,他們能避免我要經(jīng)歷的失敗。我害怕,他們懂得生命太短,人總是聰明得太遲。我害怕,他們的一小時,就是我的一生。我害怕,尤其是,還在努力的人。
學(xué)習(xí)進(jìn)度條
| 目標(biāo) | 5000行 | 30篇 | 400小時 | |
| 第一周 | 126 | 1/1 | 20/20 | |
| 第二周 | 388/466 | 1/2 | 15/35 | |
| 第三周 | 706/1162 | 1/3 | 17/52 | |
| 第四周 | 1104/2266 | 1/4 | 20/72 | |
| 第五周 | 1126/3392 | 1/5 | 15/87 | |
| 第六周 | 906/4298 | 1/6 | 20/107 | |
| 第七周 | 1233/5531 | 1/7 | 20/127 | |
| 第八周 | 1091/6622 | 1/8 | 24/151 | |
| 第九周 | 320/7042 | 1/9 | 20/171 | |
| 第十周 | 335/7377 | 1/10 | 20/191 |
計劃學(xué)習(xí)時間:20小時
實際學(xué)習(xí)時間:20小時
改進(jìn)情況:
到這一周為止,教材上的學(xué)習(xí)內(nèi)容就全部結(jié)束了,回頭看這一本書,也僅僅是學(xué)了一遍而已,里面還是存在著不熟悉以及沒有靈活掌握的內(nèi)容,尤其是最后的這幾章,都存在著一定的難度。以后還會多加復(fù)習(xí),雖然教材結(jié)束了,但Java的學(xué)習(xí)才剛剛開始而已,從下周開始,王老師就要開始教新一部分的知識和內(nèi)容了,希望我能夠應(yīng)對好以后的問題和挑戰(zhàn)吧,也希望自己以后還能夠繼續(xù)不斷進(jìn)步。
參考資料
《Java語言沒有指針,怎樣實現(xiàn)鏈表?》
《Java中兩個對象的比較equals()方法和==號的區(qū)別》學(xué)習(xí)指導(dǎo)
轉(zhuǎn)載于:https://www.cnblogs.com/yu-kunpeng/p/9061390.html
總結(jié)
以上是生活随笔為你收集整理的20172313 2017-2018-2 《程序设计与数据结构》第十周学习总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python--通过xpath相对节点位
- 下一篇: 无线覆盖项目地勘——无线地勘记录