由collection介面派生的兩個介面是list和set,都可以使用迭代器來遍歷,它們都實現了iterator介面
一.list 實現list介面的常用類有linkedlist,arraylist,vector和stack,list允許有相同的元素。
arraylist
基於陣列方式實現,無容量的限制。
在執行插入元素時可能要擴容,在刪除元素時並不會減少陣列的容量。
非執行緒安全。
linkedlist
基於雙向鍊錶機制實現。
元素的插入、移動較快。
非執行緒安全。
vector
基於object陣列的方式來實現的。
基於synchronized實現的執行緒安全的arraylist。
在插入元素時容量擴充的機制和arraylist稍有不同:
stack
基於vector實現,支援lifo。
二.set
set是一種不包含重複的元素的collection,即任意的兩個元素e1和e2都有e1.equals(e2)=false,set最多有乙個null元素。
treeset
基於treemap實現,支援排序。
非執行緒安全。
紅黑樹,可以實現元素的自然排序和定製排序
hashset
基於hashmap實現,無容量限制。
不允許元素重複。
非執行緒安全
hashset不存入相同的元素是因為,重寫了hashcode()和equals()
mapmap沒有繼承collection介面,map提供key到value的對映。乙個map中不能包含相同的key,每個key只能對映乙個value。map介面提供3種集合的檢視map的內容可以被當作一組key集合,一組value集合,或者一組key-value對映。
hashmap類
hashmap和hashtable類似,不同之處在於hashmap是非同步的,並且允許null,即null value和null key。
treemap
基於紅黑樹實現,無容量限制。
非執行緒安全。
treeset底層是用treemap實現的
面試題1.hashmap與hashtable的區別?
答:hashmap沒有考慮同步,是執行緒不安全的;hashtable使用了synchronized關鍵字,是執行緒安全的;
hashmap允許k/v都為null;hashtable後者k/v都不允許為null;
hashmap繼承自abstractmap類;而hashtable繼承自dictionary類;
如何決定選用hashmap還是treemap?
對於在map中插入、刪除和定位元素這類操作,hashmap是最好的選擇。然而,假如你需要對乙個有序的key集合進行遍歷,treemap是更好的選擇。基於你的collection的大小,也許向hashmap中新增元素會更快,將map換為treemap進行有序key的遍歷。
3.arraylist和vector有何異同點?
arraylist和vector在很多時候都很類似。
(1)兩者都是基於索引的,內部由乙個陣列支援。
(2)兩者維護插入的順序,我們可以根據插入順序來獲取元素。
(3)arraylist和vector的迭代器實現都是fail-fast的。
(4)arraylist和vector兩者允許null值,也可以使用索引值對元素進行隨機訪問。
以下是arraylist和vector的不同點。
(1)vector是同步的,而arraylist不是。然而,如果你尋求在迭代的時候對列表進行改變,你應該使用copyonwritearraylist。
(2)arraylist比vector快,它因為有同步,不會過載。
(3)arraylist更加通用,因為我們可以使用collections工具類輕易地獲取同步列表和唯讀列表
4.arraylist和linkedlist有何區別?
arraylist和linkedlist兩者都實現了list介面,但是它們之間有些不同。
(1)arraylist是由array所支援的基於乙個索引的資料結構,所以它提供對元素的隨機訪問,複雜度為o(1),但linkedlist儲存一系列的節點資料,每個節點都與前乙個和下乙個節點相連線。所以,儘管有使用索引獲取元素的方法,內部實現是從起始點開始遍歷,遍歷到索引的節點然後返回元素,時間複雜度為o(n),比arraylist要慢。
(2)與arraylist相比,在linkedlist中插入、新增和刪除乙個元素會更快,因為在乙個元素被插入到中間的時候,不會涉及改變陣列的大小,或更新索引。
(3)linkedlist比arraylist消耗更多的記憶體,因為linkedlist中的每個節點儲存了前後節點的引用。
• linkedlist是底層:雙向鍊錶
在arraylist中增加或者刪除某個元素,通常會呼叫system.arraycopy方法,這是一種極為消耗資源的操作,因此,在頻繁的插入或者是刪除元素的情況下,linkedlist的效能會更加好一點。
集合知識點梳理
父介面 collection 子介面 list set 實現類.arraylist linkedlist vector hashset,treeset,linkedhashset vector底層是陣列.執行緒安全.速度慢.arraylist底層是陣列.執行緒不安全,查詢比較速度,增刪比較慢.lin...
Java集合知識點總結
list有序且允許元素重複。map也屬於集合系統,但和collection介面沒關係。map是key對value的對映集合,其中key列就是乙個集合。key不能重複,但是value可以重複。sortedset和sortedmap介面對元素按指定規則排序,sortedmap是對key列進行排序。has...
java集合幾個知識點
1.arraylist在預設容量是10,每次進行add的時候會檢查容量,如果需要擴容則增加1.5倍,如果仍然小,則設為增加後的長度大小 2.copyonwritearraylist 保證執行緒安全的方法是 不對讀進行限制,寫的操作加重入鎖,寫的時候拷貝乙份陣列,並將新資料寫入,完成後再將引用返回。重...