2018-2019-20172329 《Java軟件結構與數據結構》第四周學習總結
經過這樣一個國慶節的假期,心中只有一個想法,這個國慶假期放的,不如不放呢!!
教材學習內容總結
《Java軟件結構與數據結構》第六章-列表
一、列表集合概念
- 1.鏈表是一種實現策略,使用引用開在對象之間創建鏈接,而列表集合是一種概念性表示法,其思想是使事物以線性列表的方式進行組織。
- 注:列表也可以是用鏈表或數組來實現。列表集合沒有內在的容量大小,它可以隨着需要而增大。
- 2.列表集合有三種類型:
(1)有序列表(order list),其元素按照元素的某種內在特性進行排序。
(2)無序列表(unordered list),其元素間不具有內在順序,元素按照它們在列表中的位置進行排序。
(3)索引列表(indexed list),其元素可以用數字索引來引用。 - 3.Java 集合的API中的列表
操作 | 描述 |
---|---|
add(E element) | 向列表末端添加一個元素 |
add(int index,E element) | 在指定索引處插入一個元素 |
get(int index) | 返回指定索引處的元素 |
remove(int index) | 刪除指定索引處的元素 |
remove(E Object) | 刪除指定對象的第一個出現 |
set(int index,E element) | 替代指定索引處的元素 |
rsize() | 返回列表中的元素數量 |
二、有序列表
- 1.有序列表是基於列表中元素的某些特性的。比如,我們按人的名字字母進行排序,或者應貨物編號來維護存貨列表。
- 注:有序列表中的元素具有內在關聯,這種關聯定義了元素之間的順序。
三、無序列表
- 1.無序列表中個元素的位置並不基於元素的任何內在特性。
- 注:無序列表中的元素按使用者所選擇的任意方式排序。
四、索引列表
- 1.索引列表的各元素間也不存在能夠決定它們在列表中的順序的內在關係。列表的使用者決定了元素的順序。
- 注:索引列表爲它的元素維護一段連續的數字索引值。
- 注:索引列表和數組的根本區別在於:索引列表的索引值總是連續的。如果刪除一個元素,其他元素的位置會像“坍塌”了一樣以消除產生的間隙,當插入一個元素時,其他元素的索引將進行位移以騰出位置。
教材學習中的問題和解決過程
- 問題1:在理解索引列表與數組的根本區別的時候,可能是因爲課本是機器翻譯的,存在一些問題,比如,對於我而言,就理解不了什麼叫做坍塌了一樣,騰出位置.....
問題1解決方案:
(1)舉個例子:數組假如要賦值的話,就需要說a[1]=某個值,而數組裏該位置的值就會被替代了,但是對於列表而言的話,插入元素不會覆蓋原有的值。問題2:在書中107頁無序列表的adt中的中間插入的方法介紹是這樣寫的:
把元素添加到列表中某個已有元素的後面。
但是,這就有個問題了,在之前就有過這個問題,假如在一個列表裏面同時出現兩個或者兩個以上相同的元素怎麼辦?該如何進行判斷?
問題2解決方法:
(1)第一個想法就是用鍵入想插入元素的位置,而不是某一個元素的後面,這樣可以保證插入的準確性;
(2)第二個方法就是先在某個元素後面插入,假如出現這個對照的元素有兩個的情況,再就細節進行判斷,需要插入到哪一個的後面。- 問題3:modCount是什麼東西?
- 問題3解決方法:因爲在第六章的課本代碼裏有提及這一方面的東西,而且也有提醒說在第七章有所細節的學習,所以我就看了看第七章,迭代器,雖然modCount變量在此次試驗中沒有涉及太過重要的角色,但是看到陌生的東西總有好奇。
- (1)modCount:是一個整數變量,一旦集合被修改(添加或刪除),它就會增加。
- 因爲在第六章還見到一個之前沒有了解過的東西,就是串行化。
- (2)串行化:在java中串行化對象必須:
- 1、該對象的類必須實現Serializable接口。
- 2、該對象的串行化成員必須是非靜態成員變量,即不能保存任何的成員方法和靜態的成員變量,而且串行化保存的只是變量的值,對於變量的任何修飾符,都不能保存。而對於某些類型的對象,其狀態是瞬時的,這樣的對象是無法保存其狀態的,例如一個Thread對象,或一個FileInputStream對象,對於這些字段,我們必須用transient關鍵字標明 。 (注:保存任何的成員方法和靜態的成員變量沒有任何的意義,因爲對象的類已經完整的保存了他們)
- 3、要串行化一個對象,必須與一定的對象輸入/輸出流聯繫起來,通過對象輸出流將對象狀態保存下來,再通過對象輸入流將對象狀態恢復。
- (2)串行化:在java中串行化對象必須:
代碼調試中的問題和解決過程
問題1:在書裏有
rear
變量,作用是什麼?
問題1解決:
(1)第一次出現這個變量的時候應該是在我們學習環形隊列的時候,在那個時候,rear代表着數組裏的最後一個元素的後一個,所以在不是環形數組裏的時候,就可以將其理解爲列表中元素的個數。- 問題2:很久沒有學習Comparable接口,忘記了
問題2解決方法:
(1)只能自己學習啦。
(2)Comparable接口1.什麼是Comparable接口
此接口強行對實現它的每個類的對象進行整體排序。此排序被稱爲該類的自然排序 ,類的 compareTo方法被稱爲它的自然比較方法 。實現此接口的對象列表(和數組)可以通過 Collections.sort(和 Arrays.sort )進行自動排序。實現此接口的對象可以用作有序映射表中的鍵或有序集合中的元素,無需指定比較器。
- 2.實現什麼方法
int compareTo(T o)
比較此對象與指定對象的順序。如果該對象小於、等於或大於指定對象,則分別返回負整數、零或正整數。
參數: o - 要比較的對象。
返回:負整數、零或正整數,根據此對象是小於、等於還是大於指定對象。
拋出:ClassCastException - 如果指定對象的類型不允許它與此對象進行比較。
上週考試錯題總結
1:A polymorphic reference uses _______________, not the type of the reference, to determine which version of a method to invoke.
A .the type of the object
B .the type of the reference
C .both A and B
D .none of the above正確答案: A 我的答案: C
解析:多態引用不能使用參考的類型來確定要調用的方法的版本。
2、In an array implementation of a Stack, the array is ___________ causing the implementation to have to create a new larger array and copy the contents of the stack into the new array in order to expand the capacity of the stack.
A .Dynamic
B .Static
C .Flexible
D .Polymorphic正確答案: B 我的答案: D
解析:對數組的理解不透徹。
3、By using the interface name as a return type, the interface doesn’t commit the method to the use of any particular class that implements a stack.
A .true
B .false正確答案: A 我的答案: B
解析:書中有相似的話,理解有誤。
4、The implementation of the collection operations should affect the way users interact with the collection.
A .true
B .false正確答案: B 我的答案: A
解析:在翻譯後沒有特別看懂題目。
5、A data structure that uses object reference variables to create links between objects is
A .Linked Structure
B .Pointer
C .Self-referential
D .Array正確答案: A 我的答案: B
解析:沒有看清題目,沒有看清數據結構幾個字,選成了指針。
6、A linked implementation of a stack adds and removes elements from the _______ of the linked list.
A .Front
B .Rear
C .Middle
D .None of the above正確答案: A 我的答案: D
解析:應該是頭刪,尾進,題目模糊。
7、The first operation removes an element at the front of the queue and returns a reference to it.
A .True
B .False正確答案: B 我的答案: A
解析:因爲刪除操作會移動指針,但是不會返回。
代碼鏈接
結對及互評
- 本週結對學習情況
- 博客中值得學習的或問題:
- 內容詳略得當;
- 代碼調試環節比較詳細;
- 基於評分標準,我給本博客打分:5分。得分情況如下:
- 正確使用Markdown語法(加1分):
- 模板中的要素齊全(加1分)
- 教材學習中的問題和解決過程, 一個問題加1分
代碼調試中的問題和解決過程, 一個問題加1分
- 博客中值得學習的或問題:
- 內容詳略得當;
- 代碼調試環節比較詳細;
- 基於評分標準,我給本博客打分:9分。得分情況如下:
- 正確使用Markdown語法(加1分):
- 模板中的要素齊全(加1分)
- 教材學習中的問題和解決過程, 一個問題加1分
- 代碼調試中的問題和解決過程, 一個問題加1分
感悟
同博客開頭。。。。。。這個國慶假期真的是太爽了!!!
學習進度條
代碼行數(新增/累積) | 博客量(新增/累積) | 學習時間(新增/累積) | |
---|---|---|---|
目標 | 5000行 | 30篇 | 400小時 |
第一週 | 0/0 | 1/1 | 6/6 |
第二週 | 1313/1313 | 1/2 | 20/26 |
第三週 | 901/2214 | 1/3 | 20/46 |
第四周 | 3635/5849 | 2/4 | 20/66 |
參考資料
藍墨雲班課
Java程序設計與數據結構
串行化
Java中實現對象的比較:Comparable接口和Comparator接口
Comparable接口的實現和使用