20172328 2018-2019《Java軟件結構與數據結構》第四周學習總結

20172328 2018-2019《Java軟件結構與數據結構》第四周學習總結

概述 Generalization

本週學習了第六章·列表,主要讓咱們認識列表以及分析各類列表實現。

教材學習內容總結 A summary of textbook

  • ==6.1列表集合==
  • 列表集合是一種概念性表示法,其思想是使事物以線性列表的方式進行組織。列表也能夠用鏈表或者數組實現,列表集合沒有內在的容量大小,它能夠隨着須要而增大。
  • 列表集合有三種類型:
    • 有序列表(ordered list):其元素按照元素的某種內在特性進行排序。
    • 無序列表(unordered list):其元素間不具備內在順序,元素按照它們在列表中的位置進行排序。
    • 索引列表(indexed list):其元素能夠用數字索引來引用。
  • ==6.2Java集合API中的列表==
  • 在JavaAPI中的ArrayList類和LinkedList類是由不一樣的底層結構實現的列表。
  • ArrayList類和LinkedList類都實現了java.util.List接口。List接口中的一些方法如圖所示:
    html

  • ==6.3使用無序列表:學習計劃==
  • Course類表明學生可能選的一門課程,ProgramOfStudy類表明一個學習項目,一個學生計劃學習的一系列課程,POSTester類示運用列表來管理一些對象。
  • ProgramOfStudy類和Course類實現了Serializable接口,爲了是某個對象能使用串行化進行存儲,其類必須實現Serializable。在Serializable接口中沒有任何方法,它只是代表,該對象能夠轉化爲串行化表示形式。(在教材問題中再深刻討論)
  • ==6.4索引列表使用示例:Josephus問題==
  • Josephus問題着眼於,當列表中的事件不是按順序取出而是每隔i個元素提取,知道一個不剩時,如何找到這些事件的順序。
  • 關鍵代碼實現:
    java

  • ==6.5列表ADT==
  • 有序列表的接口和無序列表的接口可使用繼承ListADT接口中的通用方法並各自保留本身的特殊操做。
  • ==6.6使用數組實現列表==
  • 基於數組的列表實現能把列表的一端固定在索引0處,並能夠按須要平移元素。git

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

  • 1.在書本第97頁講到了web

    ProgramOfStudy類和Course類都實現了Serializable接口爲的是某個對象能使用串行化進行存儲,該類必須實現Serializable接口。Serializable接口中沒有任何方法,只是代表該對象能夠轉換爲串行化表示形式算法

串行化表示形式不太懂。編程

  • 問題1的解答:對象的壽命一般隨着生成該對象的程序的終止而終止。有時候,可能須要將對象的狀態保存下來,在須要時再將對象恢復。
  • 咱們把對象的這種能記錄本身的狀態以便未來再生的能力。叫做對象的持續性(persistence)。對象經過寫出描述本身狀態的數值來記錄本身,這個過程叫對象的串行化(Serialization)。
  • 串行化的主要任務是寫出對象實例變量的數值。若是變量是另外一對象的引用,則引用的對象也要串行化。這個過程是遞歸的,串行化可能要涉及一個複雜樹結構的單行化,包括原有對象、對象的對象、對象的對象的對象等等。對象全部權的層次結構稱爲圖表(graph)。
  • 推薦資料:Java對象的串行化數組

  • 2.在看用數組實現列表和作pp6.8的時候一直在想一想想,modCount變量到底是什麼?爲何在列表中刪除元素modCount也要增長?
  • 問題2的解答:modCount變量是一個整數變量,一旦集合被修改(不管是增長、刪除、插入),modCount就會增長。數據結構

  • 3.在學習ProgramOfStudy類的代碼時,對替代方法replace中的一行代碼,該代碼爲if(targetIndex!=-1)不理解,雖然隱約猜到了是當目標元素索引值不返回-1,即目標索引值存在的話就進行list.set(targetIndex,newCourse)代替操做,但仍是不太理解數字-1的含義。
  • 問題3的解答:
  • public int indexOf(int ch): 返回指定字符在字符串中第一次出現處的索引,若是此字符串中沒有這樣的字符,則返回 -1。函數

  • public int indexOf(int ch, int fromIndex): 返回從 fromIndex 位置開始查找指定字符在字符串中第一次出現處的索引,若是此字符串中沒有這樣的字符,則返回 -1。學習

  • int indexOf(String str): 返回指定字符在字符串中第一次出現處的索引,若是此字符串中沒有這樣的字符,則返回 -1。

  • int indexOf(String str, int fromIndex): 返回從 fromIndex 位置開始查找指定字符在字符串中第一次出現處的索引,若是此字符串中沒有這樣的字符,則返回 -1。
  • 推薦博客:indexOf方法的使用

課後習題做答 Exercise

  • 1.在作pp6.8,pp6.9,pp6.10的時候ArrayList類中的rear初始值爲0,可是在remove方法中卻有rear--;,這樣rear不就成負數了嘛。不明白爲何不把rear的初始值定爲list.length-1
  • 習題1的解答:這個問題詢問了王文彬同窗,經過他的解答,我最終的理解是:ArrayList是一個基於數組實現的列表,在其中的方法只表明要進行的操做,在ArrayList中把rear初始化成0,可是當咱們建立對象,調用方法函數的時候,對象列表的有效長度-1(即列表最後一個有效元素的索引值)纔是rear此時的值。
  • 2.不理解代碼中的instanceof到底是什麼?這位置確定是運算符啊。
if (!(element instanceof Comparable)) 
{
    throw new NonComparableElementException("LinkedList");
}
  • 習題2的解答:instanceof運算符用於識別正在處理的對象的類型,要求開發者明確地確認對象爲某特定類型,即上述代碼語句段意爲「元素若是不是Comparable類型,則拋出一個NonComparableElementException("LinkedList")的異常」。
  • 3.在運行測試類LinkedListTest時,忽然出現了contains方法報錯,以前寫的代碼以下:

  • 習題3解決:通過改正後發現個人while循環作的是判斷,沒有讓其遍歷鏈表,並且個人返回值有點問題,改正後以下【貼圖】

上週測試活動錯題改正 Correction

  • 問題1:A polymorphic reference can refer to different types of objects over time.(多態引用能夠在一段時間內引用不一樣類型的對象)
    A .true
    B .false
  • 問題1解答:選擇A,多態就是指程序中定義的引用變量所指向的具體類型和經過該引用變量發出的方法調用在編程時並不肯定,而是在程序運行期間才肯定,即一個引用變量倒底會指向哪一個類的實例對象,該引用變量發出的方法調用究竟是哪一個類中實現的方法,必須在由程序運行期間才能決定。由於在程序運行時才肯定具體的類,這樣,不用修改源程序代碼,就可讓引用變量綁定到各類不一樣的類實現上,從而致使該引用調用的具體方法隨之改變,即不修改程序代碼就能夠改變程序運行時所綁定的具體代碼,讓程序能夠選擇多個運行狀態,這就是多態性。
  • 問題2:A reference variable can refer to any object created from any class related to it by inheritance.(引用變量能夠引用任何與它相關的類經過繼承而建立的對象)
    A .true
    B .false
  • 問題2解答:選擇A。引用變量是能夠作到的,以前沒有弄清楚。
  • 問題3:Inheritance creates an is-a relationship between all parent and child classes.(繼承建立了在全部父類與子類之間的is-a關係)
    A .true
    B .false
  • 問題3解答:選擇A.上學期課本上有。
  • 問題4:Common features should be located as low in a class hierarchy as is reasonable, minimizing maintenance efforts.
    A .true
    B .false
  • 問題4解答:選擇B,最小化維護工做應該是表述不當的,由於共同特性定義在更低層次的話可以更多的被複用。
  • 問題5:A linked list has no set capacity limitations other than the size of the computers memory(一個鏈表除了計算機內存的大小以外沒有設置容量限制)
    A .true
    B .false
  • 問題5解答:選擇A,這道題確實是本身不會作,瞎蒙的也蒙錯了,鏈表原來能夠這麼隨意的擴展啊。
  • 問題6:A data structure is the underlying programming construct used to implement a collection.(數據結構是用於實現集合的底層編程結構)
    A .true
    B .false
  • 問題6解決:選擇A。程序 = 數據結構+算法;
    軟件=程序+軟件工程;因此說數據結構是用於實現集合的底層編程結構。

    碼雲連接

代碼量(截圖)

結對及互評Group Estimate

-20172301的博客(點擊進入)
-20172304的博客(點擊進入)

點評模板:

  • 博客中值得學習的或問題:
    • 20172301:對於instanceOf理解的比較透徹,可是美中不足的是博客變簡單了。我想應該是國慶讓咱們有點懈怠了吧。好在列表以前有過接觸,繼續加油!
    • 20172304:教材問題和代碼調試中的問題和解決過程都比較簡單,解答能夠寫的再詳細一點呀!過久的假期讓咱們無意學習啊哈哈哈。

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

最難解決的問題是沒有問題。

The most difficult problem toward a man is that he has no problem.

學習進度條Learning List

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積)
目標 5000行 30篇 400小時
第一週 0/0 1/1 8/8
第二週 621/621 1/2 12/20
第三週 678/1299 1/3 10/30
第四周 2734/4033 1/4 20/50

參考資料Reference

相關文章
相關標籤/搜索