LinkedList和ArrayList的區別、Vector和ArrayList的區別
LinkedList和ArrayList的區別
繼承類和實現介面上來講
他們都實現了List介面下的方法,他們都允許重複,允許null,並且有序的集合。
LinkedList實現了Deque介面。
底層實現上來講
ArrayList底層用陣列來實現,LinkedList底層用雙連結串列來實現。
那麼ArrayList的和LinkedList的對比就會退化為陣列和連結串列的區別。
陣列隨機訪問一個元素的時間複雜度是O(1)。
連結串列的隨機訪問一個元素的時間複雜度是O(n)。
因為陣列的訪問只需要給定下標,就可以立馬訪問,而連結串列需要遍歷,遍歷的次數即為下標值。
ArrayList 的 get() ,set()方法相對於LinkedList效率要高,ArrayList的查詢以及獲取元素,效率更高
陣列隨機新增/刪除一個元素的時間複雜度是O(n)。
連結串列隨機新增/刪除一個元素的時間複雜度是O(1)。
因為陣列隨機新增一個元素,指定下標的元素以及後面的所有元素,都需要向後移動,開銷很大,而連結串列只需要將指定位置下標的上一個的節點確定,改變引用即可,開銷很小。
(tips:在指定位置新增和刪除的時候,最壞情況是O(1/2 size),因為底層呼叫node()方法查詢的時候,先判斷索引和 1/2 size誰打誰小,如果索引小,那麼從前向後查詢,如果1/2size小,那麼從後向前查詢)
LinkedList的add(),remove()方法,相對於ArrayList效率要高很多,LinkedList的刪除和新增元素,效率更高
使用上來講
當我們要使用集合來儲存的時候,我們應該考慮清楚,如果我們需要不斷的向集合中新增和刪除,那麼就使用LinkedList 鄭州人流手術多少錢
如果更多的是不斷的獲取元素,那麼就使用ArrayList。
Vector和ArrayList的區別
簡單介紹一下Vector集合。
Vector 繼承 自AbstractList,實現了List、Random、Colneable、java.io.Serializable介面,用陣列來實現。
我們會發現Vector的繼承類和實現介面和ArrayList是一模一樣的。
構造方法:
無參構造器:Vector(){},初始化陣列,預設大小為10。
雙參: Vector(int initialCapacity, int capacityIncrement)
這兩個引數分別是,初始化大小和,增量,也就是指定了擴容方式。
單參: Vector(int initialCapacity)
底層呼叫雙參構造器,增量預設為0。
Vector(Collection c) ,將集合新增到Vector中。
擴容:grow()方法,如果需要增量沒有設定,預設兩倍擴容,如果設定了增量,那麼每一次擴容一個增量的大小。
增刪改查的實現結構,與ArrayList沒有區別,但是方法都用了Synchronized 來修飾。也就是說Vector是執行緒安全的,當多執行緒訪問Vector時,不會引起各種各樣的錯誤。
所以Vector和ArrayList的區別就是:
Vector和ArrayList的底層實現一摸一樣,都是允許null,允許重複,有序的集合。
Vector在構造器可以給定增量,也就是擴容的大小,如果不給定增量,那麼就2倍擴容,ArrayList預設1.5倍擴容。
Vector執行緒安全,ArrayList非執行緒安全
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69945560/viewspace-2670683/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- ArrayList和LinkedList的區別?
- ArrayList和LinkedList的區別
- java複習之 Vector、ArrayList和LinkedList 的區別Java
- Java中Vector和ArrayList的區別Java
- ArrayList和LinkedList的區別是什麼
- java arrayList vector 區別Java
- 【java】【集合】List的三個子類—ArrayList、Vector、LinkedList的區別和聯絡Java
- ArrayList和LinkedList底層原理的區別和使用場景
- Java集合系列(二):ArrayList、LinkedList、Vector的使用方法及區別Java
- java集合【12】——— ArrayList,LinkedList,Vector的相同點與區別是什麼?Java
- ArrayList和LinkedList的比較
- java中的List介面(ArrayList、Vector、LinkedList)Java
- ArrayList、LinkedList和Vector的原始碼解析,帶你走近List的世界原始碼
- ArrayList和LinkedList如何實現的?
- Java List 常用集合 ArrayList、LinkedList、VectorJava
- std::vector 和 std::list 區別
- List集合總結,對比分析ArrayList,Vector,LinkedList
- ArrayList 其實也有雙胞胎,但區別還是挺大的!
- ../和./和/的區別
- http和https的區別/get和post的區別HTTP
- Java ArrayList 與 LinkedListJava
- ||和??的區別
- /*和/**的區別
- 老徐和阿珍的故事:ArrayList和LinkedList的效率到底哪個高?
- ArrayList & LinkedList原始碼解析原始碼
- 3、List集合——ArrayList、LinkedList
- c#中Array,ArrayList 與List<T>的區別、共性與轉換C#
- makefile =和:=的區別
- ++a和a++的區別
- ./ 和sh 的區別
- jquery $(this) 和this的區別jQuery
- JQuery this和$(this)的區別jQuery
- T和?的區別
- ArrayList,HashMap,LinkedList 初始化大小和 擴容機制HashMap
- 和區別
- 直播平臺原始碼,將全域性的ArrayList 生成區域性的ArrayList原始碼
- ArrayList和hashMap的遍歷HashMap
- law和statute的區別