java集合和隊列詳解

說明

  • java集合是jdk自帶java核心功能,它主要用來存儲大量同類型數據快速高效穩定的查找、添加、替換,主要分爲List、Set、Map、Queue,前兩個繼承Collection接口,Map爲獨立接口。

分類

  • Collection接口

    • List接口,有序可重複。

      • 分類
        • ArrayList:底層是數組,默認大小10每次增加一半,線程不安全,效率高,查詢快,增刪慢
        • Vector:底層數組,查詢快,增刪慢,線程安全,效率低,不再使用。
      • 方法
        • add(Object),add(index,Object)添加元素
        • addAll(List<Object> object) 添加列表
        • contains()是否包含元素對象
        • containsAll() 是否包含集合對象
        • remove() 移除元素或集合對象
        • size() 集合大小
    • Set接口,無序唯一

      • 分類
        • HashSet:底層爲哈希表,無序,唯一,保證唯一依賴:hashCode()和equals()
          • LinkedHashSet:底層數據結構是鏈表和哈希表,有序,唯一。FIFO(先進先出),鏈表保證元素有序,哈希表保證元素唯一。
        • TreeSet:底層紅黑樹,唯一有序。
      • 方法
        • add(Object),add(index,Object)添加元素
        • addAll(List<Object> object) 添加列表
        • contains()是否包含元素對象
        • containsAll() 是否包含集合對象
        • remove() 移除元素或集合對象
        • size() 集合大小
    • Queue接口

      • 分類
        • Deque 接口雙端隊列

          • LinkedList:底層雙向鏈表,實現Deque接口list接口,線程不安全,查詢慢,增刪快,效率高,FIFO(先進先出)。
        • 不阻塞隊列

          • PriorityQueue:實質上維護了一個有序列表。加入Queue的元素根據天然排序(java.util.Comparable 實現)或根據傳遞給構造函數java.util.Comparator實現定位。
          • ConcurrentLinkedQueue:基於鏈接節點的、線程安全的隊列。併發訪問不需要同步,因爲它在隊列的尾部添加元素並從頭部刪除它們,所以不需要知道隊列的大小,所以獲取隊列大小慢,需要遍歷隊列
        • 阻塞隊列,基於BlockingQueue接口。

          • ArrayBlockingQueue:基於數組,構造時必須指定容量,可選擇公平性,使用會有性能損耗,默認FIFO。
          • LinkedBlockingQueue:基於鏈表,容量默認Inter.MAX_VALUE,基於鏈表,FIFO先進先出。
          • PriorityBlockingQueue:封裝PriorityQueue實現,基於堆內存,理論上無限大,自帶優先級,添加的元素具有比較能力。
          • DelayQueue:基於PriorityQueue實現,存放Delayed元素,當延遲期滿時才能提取元素,自帶優先級算法
          • SynchronousQueue:利用BlockingQueue的簡單聚合機制
      • 方法
        • put(e),put(e,time,unit)添加一個元素,如果隊列滿,則阻塞
        • tak(),take(time,unit)移除並返回隊列頭部信息,如果隊列爲空,則阻塞
        • peek,返回隊列頭部,如果爲空,返回null
        • poll,移除並返回隊列頭部元素,如果隊列爲空,返回null
        • offer,添加一個元素成功返回true,失敗false
        • element,返回隊列頭部UAN蘇,如果隊列爲空,拋異常NoSuchElementException
        • remove,移除並返回隊列頭部元素,如果隊列爲空,拋異常NoSuchElementException
        • add,添加一個元素,如果隊列滿了,拋出異常IIIegaISlabEepeplian
  • Map接口

    • 分類
      • Hashtable:底層哈希表,線程安全,效率低,無序。不允許null值,父類Dictionary。
      • TreeMap:底層紅黑樹,默認排序升序排序。有序。
      • HashMap:默認大小是16,每次增加兩倍,底層哈希表,無序,線程不安全,效率高,key和value允許爲null,父類AbstractMap。jdk1.8採用數組+鏈表+紅黑樹,在鏈表過長的時候可以通過轉換成紅黑樹提升訪問性能
        • LinkedHashMap:底層鏈表和哈希表,有序。
    • 方法
      • put(key,value) 添加數據
      • containsKey(key) key是否有該值
      • containsValue(value)value是否有該值
      • get(key) 獲取key對應value
      • keySet() 獲取key,set類型。
      • size() 集合大小
      • remove()移除元素
      • values() 獲取所有value值,Collection類型。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章