Java 集合類詳解

2021-07-10 05:47:16 字數 1522 閱讀 7749

上述類圖中,實線邊框的是實現類,比如arraylist,linkedlist,hashmap等,折線邊框的是抽象類,比如abstractcollection,abstractlist,abstractmap等,而點線邊框的是介面,比如collection,iterator,list等。

發現乙個特點,上述所有的集合類,都實現了iterator介面,這是乙個用於遍歷集合中元素的介面,主要包含hashnext(),next(),remove()三種方法。它的乙個子介面linkediterator在它的基礎上又新增了三種方法,分別是add(),previous(),hasprevious()。也就是說如果是先iterator介面,那麼在遍歷集合中元素的時候,只能往後遍歷,被遍歷後的元素不會在遍歷到,通常無序集合實現的都是這個介面,比如hashset,hashmap;而那些元素有序的集合,實現的一般都是linkediterator介面,實現這個介面的集合可以雙向遍歷,既可以通過next()訪問下乙個元素,又可以通過previous()訪問前乙個元素,比如arraylist。

還有乙個特點就是抽象類的使用。如果要自己實現乙個集合類,去實現那些抽象的介面會非常麻煩,工作量很大。這個時候就可以使用抽象類,這些抽象類中給我們提供了許多現成的實現,我們只需要根據自己的需求重寫一些方法或者新增一些方法就可以實現自己需要的集合類,工作流昂大大降低。

hashset是set介面的乙個子類,主要的特點是:裡面不能存放重複元素,而且採用雜湊的儲存方法,所以沒有順序。這裡所說的沒有順序是指:元素插入的順序與輸出的順序不一致。

arraylist是list的子類,它和hashset想法,允許存放重複元素,因此有序。集合中元素被訪問的順序取決於集合的型別。如果對arraylist進行訪問,迭代器將從索引0開始,每迭代一次,索引值加1。然而,如果訪問hashset中的元素,每個元素將會按照某種隨機的次序出現。雖然可以確定在迭代過程中能夠遍歷到集合中的所有元素,但卻無法預知元素被訪問的次序。

linkedlist是一種可以在任何位置進行高效地插入和刪除操作的有序序列。

參考之前的一篇部落格:hashmap實現原理

輸出結果

疑問:為什麼value沒有被**。

是否有序

是否允許元素重複

collection否是

list是是

setabstractset否否

hashset

treeset

是(用二叉排序樹)

mapabstractmap

否使用key-value來對映和儲存資料,key必須唯一,value可以重複

hashmap

treemap

是(用二叉排序樹)

Java集合類詳解

陣列 只能存放基本資料型別,長度固定,不適合在資料未定的情況下使用 集合 存放物件,長度可變,功能強大 jdk 中 主要的集合類分為兩種 collection 和 map 集合類框架圖如下 主要分為 collection和map兩大類 collection介面是集合類中的一種基類,jdk中並沒有它的...

java常用集合類詳解

set set是基於map實現的,可以看作只有key,value為null的map,資料結構雜湊 hashset hashmap,雜湊表,陣列 單向鍊錶,效能居中 treeset 二叉樹 紅黑樹,利用treemap list 基於鍊錶和陣列 arraylist 陣列,改查快,增刪不易 private...

java集合詳解

1 vector arraylist都是以類似陣列的形式儲存在記憶體中,linkedlist則以鍊錶的形式進行儲存。2 list中的元素有序 允許有重複的元素,set中的元素無序 不允許有重複元素。3 vector執行緒同步,arraylist linkedlist執行緒不同步。4 linkedli...