前言數組
花了點時間對照着JDK1.6樹結構 ,作了下面這張圖,之後複習方便多了。安全
圖中橢圓形的是接口,棕色的長方形是抽象類,藍色的長方形是普通類;紅色線條是實現的接口。Ab是Abstract的簡寫。數據結構
一、Collection接口有三個子接口 Set,List,Queue。性能
二、爲何不直接實現Iterator,而是去實現Iterable?spa
JDK文檔中Iterable只有一個方法就是iterator(),這個方法返回一個Iterator對象。因爲Iterator進行遍歷的時候會記錄位置,假如直接取實現Iterator接口的話,遍歷的起點不會每次都是開頭,沒法達到目的,因此須要返回一個Iterator對象。線程
全部的集合類均可以經過這個方法實現遍歷。3d
三、Set用來表示一個不包含重複元素的集合,SortedSet進一步提供元素有序的Set,經過天然排序或者創建Set時提供的Comparator進行排序,Iterator遍歷時採用升序。code
NavigableSet 爲給定搜索目標報告最接近匹配項的導航方法。對象
四、ArrayList與LinkedList有什麼區別?blog
ArrayList基於動態數組的數據結構,在隨機查找功能上優於LinkedList。
LinkedList基於鏈表的數據結構,在增長和刪除功能上性能更好。
通常的使用的時候,都是用List指向一個具體對象。
五、ArrayList和Vector有什麼區別?
ArrayList和Vector都是用數組存儲對象的,且實現了List接口,從提供的方法上看很相似,可是也有區別。
首先 ArrayList的方法不是線程安全的,而Vector的全部方法是線程安全的,都使用了synchronized關鍵字。
其次 在數組增加方式上不一樣,當數據量達到默認的臨界量後如0.75,這時ArrayList就會增長50%的大小,而Vector 增長一倍的空間。
因爲同步會引發很大的系統開銷,通常狀況下都是使用ArrayList,在須要線程安全的時候使用Vector。
五、Stack的使用
push壓棧 pop彈出棧 peek查看棧頂對象而不移出 empty是否爲空。
六、Queue的使用
提供了兩種添加移出查看的方法
add remove element 假如操做失敗會拋出異常
offer poll peek 通常失敗會返回false 或者null
具體查看JDK,實現類ArrayDeque和LinkedList
七、Deque "double ended queue" 雙端隊列,讀做"deck"。
第一個元素(頭部) | 最後一個元素(尾部) | |||
拋出異常 | 特殊值 | 拋出異常 | 特殊值 | |
插入 | addFirst(e) |
offerFirst(e) |
addLast(e) |
offerLast(e) |
移除 | removeFirst() |
pollFirst() |
removeLast() |
pollLast() |
檢查 | getFirst() |
peekFirst() |
getLast() |
peekLast() |
補充面向對象的知識:
一、上面的AbList和ArrayList等都實現了List接口,這樣是能夠的。
這樣作基於兩點理由:1)歷史的緣由。
2)即便之後AbList再也不實現List,ArrayList仍然實現了List,方便使用。
只要父類implements某一接口,子類徹底繼承也能夠從新實現該接口;
對於抽象類能夠不去實現接口的方法,而是交由具體類去實現,如AbList就能夠不去實現List中的方法。