20172310 2017-2018《程序設計與數據結構》(下)第四周學習總結

學號 2017-2018-2 《程序設計與數據結構》第四周學習總結

教材學習內容總結

第六章主要研究了列表的概念以及某些管理列表的方法。html

列表集合

  • 鏈表與列表集合之間的差異:鏈表是一種實現策略,使用引用來在對象之間建立連接。
    以前的學習中就使用了鏈表來分別實現棧和隊列集合。 列表集合是種概念性表示法,
    其思想是使事物以線性列表的方式進行組織。
    就像棧和隊列同樣,列表也可使用鏈表或數組來實現。
  • 列表集合沒有內在的容量大小,它能夠隨着須要而增大。
  • 棧和隊列都是線性結構,能夠像列表那樣進行思考,但其元素只能在末端添加和刪除。列表集合更通常化,能夠在列表的中間和末端添加和刪除元素。
  • 列表集合的3種類型:
    • 有序列表(Cordered list), 其元素按照元素的某種內在特性進行排序。
    • 無序列表(unordered list),其元素間不具備內在順序,元素按使用者所選擇的任意方式排序。
    • 索引列表(indexed list), 其元素能夠用數字索引來引用,維護一段連續的數字索引值。
  • 有序列表:列表基於某個關鍵值排序。對於任何已添加到有序表中的元素,只要給定了元素的關鍵值,同時列表已經
    定義了元素的全部關鍵值,那麼它在列表中就會有一個固定的位置。
  • 無序列表:各元素的位置並不基於元素的任何內在特性。但列表中的元素還是按照特殊順序放置着,只不過這種順序與元素
    自己無關。列表的使用者會決定元素的順序。圖6.2是一個無序列表的概念圖。一個 新元素能夠置於列表的前端或者末端,或者
    被插入到列表中某個特定元素以後。
  • 索引列表:各元素間也不存在可以決定它們在列表中的順序的內在系。列表的使用者決定了元素的順序。不過,除此之外,其
    每一個元素都可以從一 個數字引值獲得引用,該索引值從列表頭開始從0連續增長直到列表末端。新的元素能夠被添加到列表的任
    一位置, 包括列表的前端和末端。每自列表發生改變,索引值就相應調整以保持順序和連續性。注意,索引列表和數組的根本區別在於:索引列表的索引值老是連續的。若是刪除了或插入,其餘的元素會進行位移,以消除間隙或騰出位置。

Java 集合API中的列表

  • Java集合API提供的列表類主要是支持索引列表。在必定程度上,這些類與無序列表是重疊的。
    然而,須要注意的是,Java API並無任何類能直接實現以上描述的有序列表。
    ArrayList和LinkedList都實現了java.util.List 接口。

由Java API提供的列表的示例。

  • 使用無序列表:學習計劃
  • 索引列表:Josephus問題(當列表中的事件不是按照順序取出而是每隔i個元素提取,直到結束,如何找到這些事件的順序)

列表ADT

  • 不少常見操做能夠爲全部類型的列表定義。這些操做之間的差異在於如何添加元素。
  • 有一些操做對有序列表和無序列表都是通用的。有序列表與無序列表之間的差異一般主要體如今往列表添加元素上。
  • 在有序列表中,只需指定要添加的新元素。該元素在列表中的位置取決於其鍵值。
  • 無序列表支持add操做的3個變體。能夠把元素添加到列表的前端、末端或是列表中某個已有元素的後面。

用數組實現列表

  • 基於數組實現的列表首先要把列表的一端固定在索引0處,設置一個整數變量rear表示列表中的元素數目,同時表示列表末端的下一個可用位置。
  • remove操做:在通常狀況下須要進行數次比較和平移操做,當要刪除的元素是列表的最後一個元素時
    須要進行n次比較和平移操做,因此其時間複雜度爲O(n)。
  • contains操做:判斷指定元素是否在列表中,最多當所找元素不在列表中時要遍歷整個列表,
    須要進行n次比較操做,因此其時間複雜度爲O(n)。
  • 有序列表的add操做
  • 無序列表的特有的addToFront和addAToRear操做和addAfter操做。addToRear時間複雜度爲O(1)。

用鏈表實現列表

  • remove操做:鏈表實現的remove操做不須要平移元素,有四種狀況:列表只有一個元素、刪除列表的首元素、刪除列表的尾元素和刪除列表的中間元素。
    在其中仍然存在要進行n次比較操做的狀況,所以其時間複雜度也爲O(n)。

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

  • 問題1:有序列表和索引列表可不能夠同時都是?
  • 問題1解決方案:能夠,但沒有什麼意義。·前端

    若是某個列表既是有序列表,又是索引列表,那麼,若是客戶應用程序試圖在某個索引處添加一一個元素,
    或者修改了某個索引處的元素(這樣該元素就不在正確的順序位置了),狀況會怎麼樣?哪一個規則的優先級更高,索引位置仍是順序?java

  • 問題2:串行化git

public class Course implements Serializableweb

代表該類能夠被串行化對。Serializable接口不含有任何方法api

  • 問題2解決方案:數組

    串行化(Serialization)是計算機科學中的一個概念,它是指將對象存儲到介質(如文件、內存緩衝區等)中或
    是以二進制方式經過網絡傳輸。以後能夠經過反串行化從這些連續的字節(byte)數據從新構建一個與原始對象狀態相同的對象,
    所以在特定狀況下也能夠說是獲得一個副本,但並非全部狀況都這樣。網絡

    • 課本例題中save和load方法分別用來把ProgramOfStudy對象寫入個文件中, 以及從文件中讀取它,
      都使用一個串行化的過程,以二進制流的形式來讀取和寫入對象。所以,只需幾行代碼,就能夠把對象的
      當前狀態存儲起來。在這裏意味着,當前存儲在學習計劃中的全部課程,都做爲對象的一部分而存儲。數據結構

    • ProgramOsudy和Course類實現了Serializable 接口 。爲了是某個對象能使用串行化進行在儲,其類必須實現Serializable。
      在Serializable接口中沒有任何方法,它只是代表,該對象能夠轉控爲串行化表示形式。ArrayList 和LinkedList類也實現了Serializable接口。學習

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

  • 問題1:

  • 問題1解決方案:本身編寫的ArrayList類是抽象的,java抽象類不能實例化。由於抽象類裏有抽象的方法,
    抽象的方法裏什麼都有沒只有一個方法,因此實例化沒有任何意義 。
    最後就導入了API中的ArrayList類

  • 問題2:!(element instanceof Comparable)這行代碼是神馬意思?
  • 問題2解決方案:

    java 中的instanceof是一個二元操做符(運算符)運算符,因爲是字母組成,因此是Java的保留關鍵字,可是
    和>=,<=,==屬同一類,它的做用是用來判斷,instanceof 左邊對象是否爲instanceof右邊類的實例,返回一個boolean類
    型值。還能夠用來判斷子父類的所屬關係。<

代碼託管

上週考試錯題總結

  • 錯題1及緣由,理解狀況
  • 解析:題目的意思是公共特徵應儘量地位於類層次結構中的低層,儘可能減小維護工做量。可是公共特徵應該是放在父類,甚至更先的類中,而這些是類層次結構中的高層,主要是沒有理解好類層次結構,才致使了這個題目的錯誤。

  • 錯題2及緣由,理解狀況

  • A、B選項的意思分別是對象的類型和引用的類型。引用類型的變量只是一個普通變量,儲存了引用類型的地址。
    對象的建立是直接在內存中分配一個內存。因此多態引用取決於那個引用變量而不是已經實例了的對象。

  • 錯題3及緣由,理解狀況

  • 多態引用能夠在一段時間內引用不一樣類型的對象。多態引用能夠參考不一樣類型的對象隨着時間的推移。
    這是兩種翻譯,就是本身弄糊塗了,因此才選錯了。

  • 錯題4及緣由,理解狀況

經過將接口名稱用做返回類型,接口會將方法提交給實現堆棧的任何特定類的使用。

結對及互評

點評:

  • 博客中值得學習的或問題:
    • 博客中教材總結詳細,代碼段都使用了鏈接的方式,使版面更加的整潔。
    • 對課本中的代碼都有仔細地去理解思考。
  • 代碼中值得學習的或問題:
    • 代碼中的結果出現問題時有及時地發現並進行修改。
  • 本週結對學習狀況
    • 20172309

    • 結對學習內容
      • 對實驗一碰見的問題進行討論
      • 教材第六章內容的共同窗習
      • 第六章代碼編寫的討論

點評過的同窗博客和代碼

其餘(感悟、思考等,可選)

咱們的學習模式又回到了上個學期,又不斷的提早在學習內容,其實課前預習是好的,可是我以爲博客的提交時間能夠放到這一章的課上完以後再提交,畢竟若是在上課以前咱們就把全部的問題都寫好了,時間有點緊,並且若是是上完課,對本身教材問題的解答也會更加的清晰,因此我覺的能夠在上一個博客完成以後放出下週學習的要求,可是deadline能夠定在上完課以後的一兩天,這樣就不會那麼緊張,也能達到預習的效果。

學習進度條

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積)
目標 5000行 30篇 400小時
第一週 0/0 1/1 10/10
第二週 326/326 1/2 18/28 學習在一點點的深刻
第三週 784/1110 1/3 25/53
第四周 2529/3638 2/5 37/90 這周編寫了不少代碼,代碼量很大

參考資料

相關文章
相關標籤/搜索