JDK1.8 Collection知識點與代碼分析--整體框架

Java中的Collection包是JDK中非常重要的一個包, 也是面試中考察的重點, 本文自頂向下的對Collection包的常用數據結構之間的關係結構到Collection包中的常用類的實現原理的知識點進行一定的整理, 供自己和大家複習使用.

Collection包的整體結構

在這裏插入圖片描述
Collection自身是一個接口, 是對集合這一概念的抽象, 提供的常用API有:

  • add(Object obj) 向Collection添加元素
  • remove(obj) 如果obj在集合中, 將其移除
  • contains(obj) 判斷是否包含
  • clear()
  • size()
  • isEmpty()
  • iterator() 返回對集合元素的迭代器
  • addAll(Collection<? extends E> c) 將一個集合的元素添加到該集合中
  • containsAll(Collection<? extends E> c)
  • retainAll(Collection c) 只保留集合裏面包含的
  • removeIf(Predicate<? super E> filter) [這個方法很香, 不用自己迭代了]

Collection下, 有三個重要的接口分別是Set, List, Map, 所代表的分別是無重複的集合, 有序集合和鍵值對集合的集合的子集. 其分別提供的API有

  • Set 和Colleciton的概念最接近, 區別在於Set中無重複, API幾乎一致
  • List list的特點是有序, 鏈表, 需要考慮的性能問題是是否支持隨機訪問, 增刪的時間複雜度這些, 因爲是有序的, 其API額外提供了一些和索引相關的內容
    • add(index, obj) 在index位置添加
    • remove(index) 刪除index位置的元素
    • set(index, obj) 修改…
    • get(index) 獲取index位置的對象
    • indexOf(obj) list中第一個obj的下標
  • Queue 隊列接口是隊列數據結構的抽象, 隊尾加, 隊首減, 提供的API有加減和查隊首元素的, 有兩套api出現異常時, 一套會拋Exception, 一套只返回null
    • add(obj) & offer(obj) 在隊尾添加元素
    • remove() & poll() 從隊首移除元素
    • element() & peek() 獲得隊首元素但不移除
  • Map 映射接口並不繼承於Colleciton, 不是廣義的Collection, 其存儲的是鍵值對, 因此API增加了對鍵和值的操作, 增刪該查也有所不同
    • put(k, v) , putIfAbsent(k,v) 增和改
    • replace(k, v), replace(k, ov, nv) 只能在存在時才能改
    • remove(k), remove(k, v) 只有都對上才刪除
    • get(k), getOrDefault(k) 查
    • compute(k, function) 對鍵值對進行計算
    • containsKey(k)
    • containsValue(v)
    • keySet()
    • entrySet()
    • values()

List類

JDK1.8 Collection知識點與代碼分析–ArrayList&LinkedList

Map類

JDK1.8 Collection知識點與代碼分析–HashMap
JDK1.8 Collection知識點與代碼分析–LinkedHashMap
JDK1.8 Collection知識點與代碼分析–TreeMap

Set類

JDK1.8 Collection知識點與代碼分析–HashSet&TreeSet

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章