20172310 2017-2018《程序設計與數據結構》(下)第四周學習總結
學號 2017-2018-2 《程序設計與數據結構》第四周學習總結
教材學習內容總結
第六章主要研究了列表的概念以及某些管理列表的方法。
列表集合
- 鏈表與列表集合之間的差別:鏈表是一種實現策略,使用引用來在對象之間創建鏈接。
之前的學習中就使用了鏈表來分別實現棧和隊列集合。 列表集合是種概念性表示法,
其思想是使事物以線性列表的方式進行組織。就像棧和隊列一樣,列表也可以使用鏈表或數組來實現。 - 列表集合沒有內在的容量大小,它可以隨著需要而增大。
- 棧和隊列都是線性結構,可以像列表那樣進行思考,但其元素只能在末端添加和刪除。列表集合更一般化,可以在列表的中間和末端添加和刪除元素。
- 列表集合的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個變體。可以把元素添加到列表的前端、末端或是列表中某個已有元素的後面。
教材學習中的問題和解決過程
- 問題1:設計要點
某個列表是否可以既是有序列表,又是索引列表?可能,但沒有什麽意義。如果某個列表既是有序列表,又是索引列表,那麽,如果客戶應用程序試圖在某個索引處添加一一個元素,或者修改了某個索引處的元素(這樣該元素就不在正確的順序位置了),情況會怎麽樣?哪個規則的優先級更高,索引位置還是順序?
- 問題1解決方案:XXXXXX
- 問題2:最後,save和load方法分別用來把ProgramOfStudy對象寫入個文件中, 以及從文件中讀取它,(與在前面示例中看到的基於文本的IO操作不同,這裏使用一個名 為串行化的過程,以二進制流的形式來讀取和寫入對象。因此,只需兒行代碼,就可以把對象的當前狀態存儲起來。在這裏意味著,當前存儲在學習計劃中的所有課程,都作為對象的一部分而存儲。
註意,ProgramOsudy和Course類實現了Serializable 接口。為了是某個對象能使用串行化進行在儲,其類必須實現Serializable.在Serializable接口中沒有任何方法,它只是表明,該對象可以轉控為串行化表示形式。ArrayList 和LmkedList類也實現了Serializable接口。
串行化
public class Course implements Serializable
表明該類可以被串行化對
Serializable接口不含有任何方法
- 問題2解決方案:XXXXXX
- ...
代碼調試中的問題和解決過程
問題1:
- 問題1解決方案:XXXXXX
- 問題2:XXXXXX
- 問題2解決方案:XXXXXX
...
代碼托管
(statistics.sh腳本的運行結果截圖)
上周考試錯題總結
- 錯題1及原因,理解情況
解析:題目的意思是公共特征應盡可能地位於類層次結構中的低層,盡量減少維護工作量。但是公共特征應該是放在父類,甚至更先的類中,而這些是類層次結構中的高層,主要是沒有理解好類層次結構,才導致了這個題目的錯誤。
- 錯題2及原因,理解情況
...
結對及互評
點評:
- 博客中值得學習的或問題:
- xxx
- xxx
- ...
- 代碼中值得學習的或問題:
- xxx
- xxx
- ...
- 本周結對學習情況
結對同學學號1
- 結對學習內容
- 對實驗一遇見的問題進行討論
- 教材第六章內容的共同學習
- 第六章代碼編寫的討論
點評過的同學博客和代碼
- 上周博客互評情況
學號 2018-2019-20172309 《程序設計與數據結構(下)》第三周學習總結
碼雲鏈接20172309的碼雲鏈接
其他(感悟、思考等,可選)
我們的學習模式又回到了上個學期,又不斷的提前在學習內容,其實課前預習是好的,但是我覺得博客的提交時間
可以放到這一章的課上完之後再提交,畢竟如果在上課之前我們就把所有的問題都寫好了,時間有點緊,而且如果
是上完課,對自己教材問題的解答也會更加的清晰,所以我覺的可以在上一個博客完成之後放出下周學習的要求,
但是deadline可以定在上完課之後的一兩天,這樣就不會那麽緊張,也能達到預習的效果。
學習進度條
代碼行數(新增/累積) | 博客量(新增/累積) | 學習時間(新增/累積) | ||
---|---|---|---|---|
目標 | 5000行 | 30篇 | 400小時 | |
第一周 | 0/0 | 1/1 | 10/10 | |
第二周 | 326/326 | 1/2 | 18/28 | 學習在一點點的深入 |
第三周 | 784/1110 | 1/3 | 25/53 |
參考資料
《Java程序設計與數據結構教程(第二版)》
- 《Java程序設計與數據結構教程(第二版)》學習指導
...
20172310 2017-2018《程序設計與數據結構》(下)第四周學習總結