20172308《程序設計與數據結構》第十週學習總結

20172308 2017-2018-2 《Java程序設計》第十週學習總結

教材學習內容總結

1.集合:

a.定義:一種對象,相似於保存其餘對象的存儲庫(而且提供增添,刪除等管理所保存元素的服務)html

b.同構:集合保存的對象類型所有相同
異構:集合能夠保存各類類型的對象java

c.特色:保存對象的基礎數據結構能夠用各類技術實現,如接口git

2.數據結構

a.動態表示:用「鏈」來實現,利用對象引用做爲鏈接對象間的鏈
優點:相比與數組事先必須固定好須要的存儲空間,數據結構的動態表示能夠根據須要增加和收縮編程

b.動態結構:
數組

c.線性數據結構
(1)隊列:相似於列表,但存取方式爲「先進先出」
(2)堆棧:相似於隊列,但存取方式爲「後進先出」數據結構

d.非線性數據結構
(1)樹:有根節點
二叉樹:每一個節點不能有超過兩個的子節點函數

(2)圖:沒有相似於根節點那樣的初始入口點
即可以有單向或雙向學習

3.泛型

a.定義:一個集合所管理的對象類型是在實例化該集合對象時才肯定.net

b.創建集合時,若是沒有指定該集合中可能存放的對象類型,則默認爲object類型,即該集合能夠存聽任何類型的對象設計

教材學習中的問題和解決過程

  • 問題1:書上說:「集合的一個重要之處是,集合能夠用各類方式實現,即保存對象的基礎數據能夠用各類技術實現」,如何理解?

  • 問題1解決過程:結合百度的資料和書上的提示,大概理解是這樣的:Java集合不能存放基本數據類型,只存放對象的引用。而集合的不一樣類型就能夠用對應數據類型的方法對其進行操做

【參考資料】
ZhuMin_ChosenOne的博客
guanglihuan的專欄

  • 問題2:書上說:「集合是一種對象」,而我記得老師上課時說它是一種類。

  • 問題2解決過程:百度到的一些資料都說的是「集合類」。
    集合類存放的都是對象的引用,而非對象自己,出於表達上的便利,咱們稱集合中的對象就是指集合中對象的引用
    集合類型主要有3種:set(集)、list(列表)和map(映射)。
    並無說集合是一種對象的,很奇怪...

【參考資料】
百度百科
TonyW的專欄

  • 問題3:書上提到了MagazineNode是個內部類,所以將該內部類中的數據聲明爲公有是合理的,那什麼是內部類?爲何不放在外面?何時用內部類?

  • 問題3解決過程:
    a.定義:內部類(nested classes),面向對象程序設計中,能夠在一個類的內部定義另外一個類。

b.優勢:

  • (1). 內部類對象能夠訪問建立它的對象的實現,包括私有數據;
  • (2). 內部類不爲同一包的其餘類所見,具備很好的封裝性;
  • (3). 使用內部類能夠很方便的編寫程序(emmm,我也是這麼以爲的,不用聲明要調用某個類了);

c.爲何須要內部類:內部類方法能夠訪問該類定義所在的做用域的數據,包括私有的數據
內部類能夠對同一個包中的其餘類隱藏起來,通常的非內部類,是不容許有 private 與protected權限的,但內部類能夠能夠實現多重繼承

d.使用內部類最吸引人的緣由是:
  每一個內部類都能獨立地繼承自一個(接口的)實現,因此不管外圍類是否已經繼承了某個(接口的)實現,對於內部類都沒有影響。
你們都知道Java只能繼承一個類,它的多重繼承在咱們沒有學習內部類以前是用接口來實現的。但使用接口有時候有不少不方便的地方。
好比咱們實現一個接口就必須實現它裏面的全部方法。而有了內部類就不同了。它可使咱們的類繼承多個具體類或抽象類。

【參考資料】
tony~博客小屋
百度百科

代碼調試中的問題和解決過程

  • 問題1:PP13.1,原來儲存在數組裏的DVD集,如今要求用鏈表進行維護,即經過鏈表進行刪改儲存的DVD集

  • 問題1解決過程:
    結合書上的例題,個人編程思路是:
    首先,用鏈表的其中一點好處就是,不受數組事先聲明好的內存空間限制。原來的程序寫了一個increaseSize()方法,在add方法裏調用,使得DVD片數超過數組長度時可以調用這個方法來擴大數組長度。而用鏈表維護就不用專門寫這個方法了,DVD集的存儲個數是動態的。
    因此,編程的主要體現就是不利用數組。

在編譯過程當中出現瞭如圖的不是預期的結果:

程序中寫了三個addDVD方法,按道理應該輸出不一樣的內容,但結果只輸出了第三個add的內容,檢查了一下add方法的編寫,應該沒有錯誤,而後猜想應該是toString寫錯了,代碼如圖:

原先的collection是一個數組對象,而後經過for循環來遍歷數組內元素並打印,可是更改之後循環就會出現上圖的錯誤
更改toString方法之後,代碼以下:

經過鏈表來將每個節點的元素打印出來,就解決了問題。

代碼託管

上週考試錯題總結

  • 錯題1:

  • 錯題1解析:該方法將字符串a中的每一個字符與char b進行比較,直到我到達字符串a的長度。1被添加到每一個匹配的返回值中。

  • 錯題2:

  • 錯題2解析:這個方法遞歸地調用它本身,n是它的原始值的一半。若是n從16開始,第二個調用有n = 8,第三個有n = 4,第4個有n = 2,第5個和最後一個調用有n = 1。若是n從32開始,它會增長一個額外的調用。若是咱們再次加倍,它只會增長一個遞歸調用。這是一個log2(n)行爲。

  • 錯題3:

  • 錯題3解析:爲了簡單起見,數學一般遞歸地定義函數。這種問法讓我懷疑其它項也有正確的可能性,但說到底仍是對遞歸的做用和意義不是真正理解。

  • 錯題4:

  • 錯題4解析:若是調用x< 0,則原始方法會致使無限遞歸,但若是使用任何x>= 0,則能夠正常工做。對於新的基本狀況,若是使用任何參數>= 1,該方法如今能夠正常工做,但若是參數< 1,則會致使無限遞歸。因此sum(0)和以前的是不一樣的。本題出錯的緣由是對遞歸的代碼沒有認真分析,兩種狀況下,遞歸的條件不一樣。

  • 錯題5:

  • 錯題5解析:遞歸定義不包含基本狀況,所以全部int值列表都將無限長!首先這題的題目看不懂,list後面的下劃線不知道是什麼意思,徹底看不出哪裏有遞歸的影子。並且沒有百度到。

  • 錯題6:

  • 錯題6解析:遞歸和迭代都是重複的形式。使用遞歸或迭代的重複使用是一種風格、味道、有時是效率,有時是方便。但它們在計算上是等價的——每個均可以被另外一個取代。由於書上只提到了,遞歸均可以用循環代替,並無說兩者能夠互換,百度上也沒有確定的說法,因此就選了錯誤,反映出本身的思惟不夠發散

  • 錯題7:

  • 錯題7解析:添加方法適用於大於或等於零的ints;但若是b小於0,它就失敗了。跟前面一題同樣,看不懂題目,不知道問號是什麼意思,也許百度一下就會作了吧,可是時間有限

  • 錯題8:

  • 錯題8解析:乘法只是重複的加法。這個方法只是重複添加a, b乘以。只要a和b都是非負的,這個方法就沒問題。跟上一題同樣。

結對及互評

  • 博客中值得學習的或問題:
    • 侯澤洋同窗的博客排版工整,界面很美觀
    • 問題總結作得很全面
    • 對於書上的疑惑總會想辦法解決它,這種探索的精神值得我去學習
  • 代碼中值得學習的或問題:
    • 對於編程的編寫總能找到角度去解決
  • 本週結對學習狀況
    • 20172302
    • 結對學習內容
      • 第十三章內容:集合

學習進度條

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積) 重要成長
目標 5000行 30篇 400小時
第一週 309/309 1/1 20/20
第二週 269/578 1/2 18/38
第三週 236/776 1/3 22/60
第四周 507/1283 2/5 30/90
第五週 631/1914 1/6 30/120
第六週 529/2443 1/7 25/145
第七週 515/2958 1/8 25/170
第八週 1128/4086 2/10 50/220
第九周 1241/5327 1/11 15/235
第十週 1852/7179 1/12 10/245

參考資料

相關文章
相關標籤/搜索