list
list是乙個有序的集合,和set不同的是,list允許儲存項的值為空,也允許儲存相等值的儲存項
list是繼承於collection介面,除了collection通用的方法以外,擴充套件了部分只屬於list的方法
list比collection主要多了幾個add(…)方法和remove(…)方法的過載,還有幾個index(…), get(…)方法。
arraylist基於陣列(用於儲存相同資料型別的)實現的,是乙個動態陣列,提供了動態的增加和減少元素,實現了collection和list介面
可以靈活的設定陣列的大小。要注意的是arraylist並不是執行緒安全的,因此一般建議在單執行緒中使用arraylist
查詢快,增刪慢。執行緒不安全,效率高。
linkedlist鍊錶(根據儲存位址串聯起來的)是一種根據元素節點邏輯關係排列起來的一種資料結構。
利用鍊錶可以儲存多個資料,這一點類似於陣列的概念,查詢慢,增刪快。執行緒不安全,效率高。
vector與arraylist基本相同,都是基於陣列實現的,但是它是arraylist的安全版,查詢快,增刪慢。
執行緒安全,效率低
vector相對arraylist查詢慢(執行緒安全,都是陣列實現的)
vector相對linkedlist增刪慢 (資料結構,都是資料不安全的)
一、 同步性
arraylist,linkedlist是不同步的,而vestor是同步的。所以如果不要求執行緒安全的話,可以使用arraylist或linkedlist,可以節省為同步而耗費的開銷。但在多執行緒的情況下,有時候就不得不使用vector了。當然,也可以通過一些辦法包裝arraylist,linkedlist,使他們也達到同步,但效率可能會有所降低。
二、 資料增長
從內部實現機制來講arraylist和vector都是使用objec的陣列形式來儲存的。當你向這兩種型別中增加元素的時候,如果元素的數目超出了內部陣列目前的長度它們都需要擴充套件內部陣列的長度,vector預設情況下自動增長原來一倍的陣列長度,arraylist是原來的50%,所以最後你獲得的這個集合所佔的空間總是比你實際需要的要大。所以如果你要在集合中儲存大量的資料那麼使用vector有一些優勢,因為你可以通過設定集合的初始化大小來避免不必要的資源開銷。
三、 檢索、插入、刪除物件的效率
arraylist和vector中,從指定的位置(用index)檢索乙個物件,或在集合的末尾插入、刪除乙個物件的時間是一樣的,可表示為o(1)。但是,如果在集合的其他位置增加或移除元素那麼花費的時間會呈線形增長:o(n-i),其中n代表集合中元素的個數,i代表元素增加或移除元素的索引位置。為什麼會這樣呢?以為在進行上述操作的時候集合中第i和第i個元素之後的所有元素都要執行(n-i)個物件的位移操作。
linkedlist中,在插入、刪除集合中任何位置的元素所花費的時間都是一樣的—o(1),但它在索引乙個元素的時候比較慢,為o(i),其中i是索引的位置。
List三個子類的特點?
arraylist 底層資料結構是陣列,查詢快,增刪慢 執行緒不安全,效率高 vector 底層資料結構是陣列,查詢快,增刪慢 執行緒安全,效率低 vector相對arraylist查詢慢 執行緒安全 vector相對linkedlist增刪慢 陣列結構 linkedlist 底層資料結構是鍊錶,查...
list 的三個子類
arraylist 底層資料結構是陣列,查詢快,增刪慢。執行緒不安全,效率高。vector 底層資料結構是陣列,查詢快,增刪慢。執行緒安全,效率低。linkedlist 底層資料結構是鍊錶,查詢慢,增刪快。執行緒不安全,效率高。vector 類可以實現可增長的物件陣列 vector 是同步的。pub...
集合框架(List的三個子類的特點)
list的三個子類 面試題比較多 arraylist 底層資料是陣列,查詢快,增刪慢 執行緒不安全,效率高 jdk 1.2 vector 底層資料是陣列,查詢快,增刪慢 執行緒安全,效率低 jdk1.0出現,在1.2並到list中,一般不用,被淘汰 linkedlist 底層資料是鍊錶,查詢慢,增刪...