教材學習內容總結
1.集合
- 定義:專門用於保存信息的對象。
- 集合的同構和異構:
- 同構:集合中保存的類型所有相同。
- 異構:集合中能夠保存所有的類型。
2.數據結構
- 數據結構分類:

- 動態數據結構:一個動態數據結構使用鏈來實現,它的大小規模能夠隨意增大減少。
- 線性數據結構
- 隊列(queue)
- 採起先進先出的方式,使用於有等待特色的排列。
- 方法摘要:

- 堆棧(stack)
- 採起先進後出的方式,使用於有疊加特色的排列。
- 方法摘要:

- 非線性數據結構
- 樹
- 由一個根節點和構成層次結構的多個節點(內部節點)組成
- 特殊樹——二叉樹:二叉樹的每一個節點不能有超過兩個的子節點

- 圖
- 圖沒有初始入口點
- 在一個圖中,從一個節點到另外一個節點的鏈接邊稱邊,邊能夠是雙向的,也能夠是單向的。
- 當事物間的關係比較複雜沒法用正常的層次結構來表現時,圖是一種很好的選擇。
- 沒找到示意圖_(:з」∠)_
3.Java集合類API

- 泛型:只一個集合所管理的對象的類型要在實例化給集合對象時才肯定。
教材學習中的問題和解決過程
- 問題1:arraylist和linkedlist的區別?
- 問題1解決方案:經過查找得知:(1)ArrayList是實現了基於動態數組的數據結構,LinkedList基於鏈表的數據結構。(2)對於隨機訪問get和set,ArrayList以爲優於LinkedList,由於LinkedList要移動指針。(3)對於新增和刪除操做add和remove,LinedList比較佔優點,由於ArrayList要移動數據。但這一點要看實際狀況的。若只對單條數據插入或刪除,ArrayList的速度反而優於LinkedList。但如果批量隨機的插入刪除數據,LinkedList的速度大大優於ArrayList。由於ArrayList每插入一條數據,要移動插入點及以後的全部數據。
- 問題2:數據結構的劃分好像和咱們上課講的不同,那麼數據結構究竟在java中有哪些方法?
- 問題2解決方案:在查找過程當中發現了一張類型很全的圖,其中實線邊框的是實現類,折線邊框的是抽象類,而點線邊框的是接口

- (看告終對夥伴的博客後增長的問題)問題3:隊列、樹、圖如何用代碼來實現?
- 問題3解決方法:
- 隊列。隊列分爲單隊列和循環隊列兩種,單隊列又可分爲順序隊列和鏈式隊列。單隊列是一種常見的隊列,每次添加元素時都會放到隊尾,但單隊列中偶爾會出現「假溢出」的狀況,針對這種狀況,就可使用循環隊列,從新從頭開始添加,就像一個圓環同樣,頭尾相連。代碼實現:java隊列實現
- 關於圖的內容,看了一下張昊然同窗給的網址,它主要講的是如何用鄰接表的方式來實現圖的,而這篇博客其實還有一個下篇:數據結構--圖 的JAVA實現(下),講的是如何利用鄰接表作一個有向無環圖。而在上篇的博客中提到圖有兩種表示方法:鄰接表和鄰接矩陣,但該博客裏只講了一種方法,因此我又去查了另一種方法:java中圖的兩種存儲方式。
- 樹。樹的實現有兩種方法,分別是以數組的形式和以鏈表的形式。
//數組形式(又稱父節點表示法)
public class TreeNode {
private Object mData; //存儲的數據
private int mParent; //父親節點的下標
public TreeNode(Object data, int parent) {
mData = data;
mParent = parent;
}
public Object getData() {
return mData;
}
public void setData(Object data) {
mData = data;
}
public int getParent() {
return mParent;
}
public void setParent(int parent) {
mParent = parent;
}
}
public static void main(String[] args){
TreeNode[] arrayTree = new TreeNode[10];
}
//鏈表形式
public class LinkedTreeNode {
private Object mData; //存儲的數據
private LinkedTreeNode mParent; //父親節點的下標
private List<LinkedTreeNode> mChildNodeList; //孩子節點的引用
public LinkedTreeNode(Object data, LinkedTreeNode parent) {
mData = data;
mParent = parent;
}
public Object getData() {
return mData;
}
public void setData(Object data) {
mData = data;
}
public Object getParent() {
return mParent;
}
public void setParent(LinkedTreeNode parent) {
mParent = parent;
}
public List<LinkedTreeNode> getChild() {
return mChildNodeList;
}
public void setChild(List<LinkedTreeNode> childList) {
mChildNodeList = childList;
}
}
代碼調試中的問題和解決過程
- 問題1:在運行PP13.3的驅動類時,輸出的結果爲
null
.

- 問題1解決方案:使用DeBug進行調試發現,若是我設置的循環條件是list不爲空的話,當它爲空時才能跳出循環,而當它爲空時,等於說原來指針後面的東西所有丟掉了,因此最後輸出結果也爲空。解決方法是又添加了一個指針pre,使
pre=list
,而後把全部原來是list的地方都改爲pre,這樣就避免了list變爲空,程序也就能正常運行了。
代碼:

commit提交:

html
上週考試錯題總結(正確爲綠色,錯誤爲紅色)
- 錯題1:Assume infile is a BufferedReader for a textfile and that the textfile is empty. What is returned from the message infile.readLine( ); ?
- A . 0
- B . null
- C . a special character known as the End-of-file marker (EOF)
- D . none of the above, the message causes a NullPointerException to be thrown
- E . none of the above, the message causes a EndOfFileException to be thrown
- 緣由及理解狀況:當時查JDK的時候它的原話是「若是已到達流末尾,則返回 null」,
因此以爲B不對應該是拋出一個錯誤。後來想了一下加入文件爲空的話等於說它剛進去就達到了末尾,因此會返回「null」。
- 錯題2:If an exception arises in a catch statement, and the exception is of the type caught by the catch statement, then the catch statement catches the same exception. For instance, if the following catch statement first catches an ArithmeticException and, while executing, throws another ArithmeticException, it is able to catch the second ArithmeticException as well the first.
catch (ArithmeticException ex) {...}
- 緣由及理解狀況:catch語句不會捕獲從它自身內部拋出的異常,儘管catch語句能夠在其中嵌套額外的try和catch語句。
結對及互評
點評模板
- 博客中值得學習的或問題:
- 優勢:在看他的問題和解答時發現了不少本身以前其實也不清楚可是沒發現的問題,並且他的問題解答都比較簡明扼要,我結合他的問題又在本身的博客中進行了修改(已標註)除此以外發現本身的博客沒有上傳commit截圖,現已添加。
- 缺點:教材內容總結仍是沒有很大改進...內容仍是過於簡單。
- 代碼中值得學習的或問題:
- 本週優勢和缺點結合着說吧,看了一下PP項目,有些借鑑,但很好的一點是否是把代碼直接複製過來,而是在看懂以後並加入了本身的理解,註釋了不少。我聽一個學長說過,真正作項目的時候是不可能完徹底全本身把一個程序的全部代碼都想出來的,總會或多或少有一些借鑑,因此說借鑑不是壞事,重要的是學會所借鑑的內容中所使用的方法和思想。
點評過的同窗博客和代碼
- 本週結對學習狀況
- 20172322
- 結對學習內容
- 共同討論了書上的MagzineList類,詢問了老師,真正理解了代碼的含義。
- 幫助張昊然同窗解決了PP9.1的問題,提供了PP13.3當中使用鏈表實現選擇排序的思路。
其餘(感悟、思考等,可選)
- 最近看完了一本書,裏面的主角的一句話我很喜歡,感受對待java學習、對待其餘學業學習、對待人生,都應該有這種態度:珍惜天賦,保持悲憫。這裏的「悲憫」我以爲能夠理解爲是一種謙虛,一樣是一種包容,仍是一種求真和探索。我的認爲在java方面本身是一點天賦都沒有的,但依舊要保持這種「悲憫」的心態去努力地求學。
學習進度條
目標 |
5000行 |
30篇 |
400小時 |
|
第一週 |
120/120 |
1/1 |
9/9 |
|
第二週 |
246/366 |
1/2 |
9/18 |
|
第三週 |
785/1121 |
2/4 |
15/33 |
|
第四周 |
615/1736 |
1/5 |
20/53 |
|
第五週 |
1409/2645 |
1/6 |
24/77 |
|
第六週 |
561/3206 |
1/7 |
20/97 |
再次搞清了一些本身有點含糊不清的概念 |
第七週 |
63/3269 |
1/8 |
15/112 |
|
第八週 |
2476/5745 |
3/11 |
90/201 |
|
第九周 |
824/6595 |
1/12 |
20/221 |
|
第十週 |
919/7514 |
2/14 |
20/241 |
|
參考資料