JAVA SE 基礎複習-核心庫-Collection---java.util

前言數組

  花了點時間對照着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中的方法。

相關文章
相關標籤/搜索