1. 程式人生 > >20172320 2017-2018-2 《Java程序設計》第十周學習總結

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

AI 比較 amp .com res 類型轉換 行數 進度條 rect

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

教材學習內容總結

1、集合是一種對象,類似於保存其他對象的存儲庫
- 集合的同構意味著這種集合保存類型全部相同的對象;異構意味著可以保存各種類型的對象
2、抽象數據類型(ADT)是由數據和在該數據上所實施的具體操作構成的集合。
- ADT有名稱、值域和一組允許執行的操作
- ADT上可以執行的操作與底層的實現分離開了
3、一個動態數據結構用鏈來實現,動態數據結構的大小規模隨需要增長和收縮
4、線性數據結構
- 隊列:類似於列表,隊列的元素存取方式有限,是一種以先進先出方式管理數據的線性數據結構
- 堆棧:一種以後進先出方式管理數據的線性數據結構
5、非線性數據結構
- 樹:樹是一個非線性數據結構,由一個根節點和構成層次結構的多個節點組成。除根節點外的所有節點稱為內部節點,沒有子節點的節點稱為葉節點。根節點在頂層,葉節點在底層。二叉樹和樹的操作有所不同
- 圖:沒有類似於樹根節點那樣的初始入口點。一個節點到另一個節點的連接稱為邊,連接一個圖內各節點的邊數一般沒有限制
6、Java集合類API:定義了幾種表示不同類型集合的類
- 泛型:Java集合類ARI中的類定義為泛型,指一個集合所管理的對象的類型要在實例化該集合對象時才確定,泛型保證了集合中對象類型的兼容性

教材中遇到的問題和解決過程‘

  • 問題1:隊列和堆棧?
  • 問題1解決方案:
  • 隊列:隊列(Queue)是只允許在一端進行插入,而在另一端進行刪除的運算受限的線性表
    (1)允許刪除的一端稱為隊頭
    (2)允許插入的一端稱為隊尾
    (3)當隊列中沒有元素時稱為空隊列
  • 堆棧:限制僅在表的一端進行插入和刪除運算的線性表
    (1)通常稱插入、刪除的這一端為棧頂(Top),另一端稱為棧底(Bottom)。
    (2)當表中沒有元素時稱為空棧
  • 作用:堆棧:1.用於符號匹配
    2.用於計算代數式
    3.構造表達式
    4.用於函數調用
    (2、3可以用二叉樹來解決)

  • 相同點:1.都是線性結構。
    2.插入操作都是限定在表尾進行。
    3.都可以通過順序結構和鏈式結構實現。
    4.插入與刪除的時間復雜度都是O(1),在空間復雜度上兩者也一樣。
    5.多鏈棧和多鏈隊列的管理模式可以相同。
  • 不同點:1.刪除數據元素的位置不同,棧的刪除操作在表尾進行,隊列的刪除操作在表頭進行。
    2.應用場景不同;常見棧的應用場景包括括號問題的求解,表達式的轉換和求值,函數調用和遞歸實現,深度優先搜索遍歷等;常見的隊列的應用場景包括計算機系統中各種資源的管理,消息緩沖器的管理和廣度優先搜索遍歷等。
    3.順序棧能夠實現多棧空間共享,而順序隊列不能。

  • 問題2:泛型的理解
  • 問題2解決方案:
    本質:為了參數化類型(在不創建新的類型的情況下,通過泛型指定的不同類型來控制形參具體限制的類型)。也就是說在泛型使用過程中,操作的數據類型被指定為一個參數,這種參數類型可以用在類、接口和方法中
    例子:見參考鏈接
    特性:泛型只在編譯階段有效
    使用:- 泛型類:用於類的定義中,通過泛型可以完成對一組類的操作對外開放相同的接口
    - 泛型接口:與泛型類的定義及使用基本相同,泛型接口常被用在各種類的生產器中
    - 泛型方式
    優點:- 把運行時期的問題提前到了編譯期間
    - 避免了強制類型轉換
    - 優化了程序設計,解決了黃色警告線問題,讓程序更安全

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

上周考試錯題總結

  • What does the following method compute? Assume the method is called initially with i = 0
    public int question9(String a, char b, int i)
    {
    if (i = = a.length( )) return 0;
    else if (b = = a.charAt(i)) return question9(a, b, i+1) + 1;
    else return question9(a, b, i+1);
    }
    A .the length of String a
    B .the length of String a concatenated with char b
    C .the number of times char b appears in String a
    D .returns 1 if char b appears in String a at least once, and 0 otherwise
    E .the char which appears at location i in String a
    分析:該方法將字符串a中的每個字符與char b進行比較,直到i到達字符串a的長度。1被添加到每個匹配的返回值中。

  • A recursive algorithm is superior to an iterative algorithm along which of the following criteria?
    A .The recursive algorithm is easier to debug
    B .The recursive algorithm is computationally more efficient
    C .The recursive algorithm is more elegant
    D .The recursive algorithm requires less memory to execute
    E .all of the above
    分析:為了簡單起見,數學通常遞歸地定義函數

  • The difference between direct and indirect recursion is
    A .direct recursion occurs when a method invokes itself; indirect recursion occurs when there is an intervening method
    B .indirect recursion occurs when a method invokes itself; direct recursion occurs when there is an intervening method
    C .direct recursion only occurs with methods declared to be private; indirect recursion can occur with methods declared to be private, protected, or public
    D .indirect recursion only occurs with methods declared to be private; direct recursion can occur with methods declared to be private, protected, or public
    E .none of the above
    分析:直接遞歸意味著方法直接調用自己,而不使用中介方法。當再次調用原始方法之前有一個或多個中介方法時,就會發生間接遞歸。

    結對及互評

點評過的同學博客和代碼

  • 本周結對學習情況
    20172327
    20172317
  • 結對學習內容
    ?教材第11,12章
    ?閱讀11.1-11.6、12.1-12.3章節
    ?完成課後自測題,並參考答案學習
    ?完成課後練習題
    ?完成程序設計項目:至少完成PP11.1、PP11.2、PP12.1、PP12.9

學習進度條

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積) 重要成長
目標 5000行 30篇 400小時
第一周 67/67 1/4 20/20
第二周 328/395 1/5 20/40
第三周 523/851 1/6 20/60
第四周 1070/1921 1/7 20/80
第五周 608/2529 1/8 10/90
第六周 608/2899 1/9 20/110
第七周 429/3328 1/10 20/130
第八周 804/4131 1/11 20/150
第九周 521/4652 1/12 20/170
第十周 600/5252 1/13 20/190

參考資料

  • 《Java程序設計與數據結構教程(第八版)》
  • 藍墨雲班課
  • 隊列和堆棧的區別
  • 棧與隊列的異同
  • java 泛型詳解

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