1. 程式人生 > >java集合之collection

java集合之collection

相等 支持 隨機 microsoft index 實現 collect 基於 ffffff

Collection架構層次關系1.Set (不能有重復元素)1.1HashSet1.1.1LinkedHashSet2.List (必須保持元素特定的順序)2.1ArrayList2.2Vector2.2.1Stack2.3LinkedList3.Queue (保持一個隊列(先進先出)的順序)3.1PriorityQueue3.2Deque(接口3.2.1 ArrayDeque3.2.2 LinkedList
1.1HashSet關系java.util.HashSet ,繼承AbstractSet<E> ,實現Set<E> 原理HashSet使用HASH算法來存儲集合中的元素,因此具有良好的存取和查找性能。當向HashSet集合中存入一個元素時,HashSet會調用該對象的hashCode()方法來得到該對象的hashCode值,然後根據該HashCode值決定該對象在HashSet中的存儲位置。
註意:HashSet集合判斷兩個元素相等的標準是兩個對象通過equals()方法比較相等,並且兩個對象的hashCode()方法的返回值相等
1.1.1 LinkedHashSet關系java.util.LinkedHashSet, 繼承HashSet<E>,實現Set<E>原理 LinkedHashSet集合也是根據元素的hashCode值來決定元素的存儲位置。但和HashSet不同的是,它同時使用鏈表維護元素的次序,這樣使得元素看起來是以插入的順序保存的。註意:當遍歷LinkedHashSet集合裏的元素時,LinkedHashSet將會按元素的添加順序來訪問集合裏的元素。 LinkedHashSet需要維護元素的插入順序,因此性能略低於HashSet的性能,但在叠代訪問Set裏的全部元素時(遍歷)將有很好的性能(鏈表很適合進行遍歷)

2.1 ArrayList 關系java.util.ArrayList,繼承AbstractList<E>,實現List<E>原理可以動態增長的數組;默認數組的容量為10特點:
  • 隨機訪問速度快,插入和移除性能較差(數組的特點);
  • 支持null元素;
  • 有順序;
  • 元素可以重復;
  • 線程不安全;
  • ArrayList 擴容1.5倍
時間復雜度:
  • get() 直接讀取第幾個下標,復雜度 O(1)
  • add(E) 添加元素,直接在後面添加,復雜度O(1)
  • add(index, E) 添加元素,在第幾個元素後面插入,後面的元素需要向後移動,復雜度O(n)
  • remove()刪除元素,後面的元素需要逐個移動,復雜度O(n)

2.2 Vector 關系java.util.Vector; 繼承AbstractList<E>, 實現List<E>原理
  • 底層由一個可以增長的數組組成
特點:
  • 同步類,每個方法前都有同步鎖 synchronized
  • 線程安全
  • 效率比ArrayList低

2.2.1 Stack關系java.util.Stack;繼承Vector<E>原理
  • 基於Vector實現,線程安全
特點:
  • 先進後出

2.3 LinkedList關系java.util.LinkedList; 繼承AbstractSequentialList,實現List<E>, Deque<E>原理基於鏈表實現的List;同時它還實現Deque接口,即能將LinkedList當作雙端隊列使用。也可以到對棧來使用時間復雜度:
  • get() 獲取第幾個元素,依次遍歷,復雜度O(n)
  • add(E) 添加到末尾,復雜度O(1)
  • add(index, E) 添加第幾個元素後,需要先查找到第幾個元素,直接指針指向操作,復雜度O(n)
  • remove()刪除元素,直接指針指向操作,復雜度O(1)

3.1 PriorityQueue關系java.util.PriorityQueue; 繼承AbstractQueue<E>;原理PriorityQueue的邏輯結構是一棵完全二叉樹,存儲結構其實是一個數組特點: PriorityQueue並不是一個比較標準的隊列實現,PriorityQueue保存隊列元素的順序並不是按照加入隊列的順序,而是按照隊列元素的大小進行重新排序
3.2 Deque(接口)關系java.util.Deque; 繼承Queue<E>特點:Deque接口代表一個"雙端隊列",雙端隊列可以同時從兩端來添加、刪除元素,因此Deque的實現類既可以當成隊列使用、也可以當成棧使用
3.2.1 ArrayDeque關系java.util.ArrayDeque;繼承AbstractCollection;實現Deque<E>原理基於數組實現特點:
  • 默認容量為16

3.2.2 LinkedList關系java.util.LinkedList; 繼承AbstractSequentialList,實現List<E>, Deque<E>

java集合之collection