List Set Map 底層實現和使用推薦

2021-12-29 20:52:45 字數 2943 閱讀 5927

list和set和map的實現方式以及儲存方式?

list常用實現方式有:arraylist和linkedlist

arraylist 的儲存方式:陣列,查詢快

linkedlist的儲存方式:鍊錶,插入,刪除快

set常用實現方式有:hashset和treeset

hashset的儲存方式:雜湊碼演算法,加入的物件需要實現hashcode()方法,快速查詢元素

treeset的儲存方式:按序存放,想要有序就要實現comparable介面

附加:集合框架提供了2個實用類:collections(排序,複製、查詢)和arrays對陣列進行(排序,複製、查詢)

map常用實現方式有:hashmap和treemap

hashmap的儲存方式:雜湊碼演算法,快速查詢鍵值

treemap儲存方式:對鍵按序存放

具體:

1:集合

collection(單列集合)

list(有序,可重複)

arraylist

底層資料結構是陣列,查詢快,增刪慢

執行緒不安全,效率高

vector

底層資料結構是陣列,查詢快,增刪慢

執行緒安全,效率低

linkedlist

底層資料結構是鍊錶,查詢慢,增刪快

執行緒不安全,效率高

set(無序,唯一)

hashset

底層資料結構是雜湊表。

雜湊表依賴兩個方法:hashcode()和equals()

執行順序:

首先判斷hashcode()值是否相同

是:繼續執行equals(),看其返回值

是true:說明元素重複,不新增

是false:就直接新增到集合

否:就直接新增到集合

最終:自動生成hashcode()和equals()即可

linkedhashset

底層資料結構由鍊錶和雜湊表組成。

由鍊錶保證元素有序。

由雜湊表保證元素唯一。

treeset

底層資料結構是紅黑樹。(是一種自平衡的二叉樹)

如何保證元素唯一性呢

根據比較的返回值是否是0來決定

如何保證元素的排序呢

兩種方式

自然排序(元素具備比較性)

讓元素所屬的類實現comparable介面

比較器排序(集合具備比較性)

讓集合接收乙個comparator的實現類物件

map(雙列集合)

a:map集合的資料結構僅僅針對鍵有效,與值無關。

b:儲存的是鍵值對形式的元素,鍵唯一,值可重複。

hashmap

底層資料結構是雜湊表。執行緒不安全,效率高

雜湊表依賴兩個方法:hashcode()和equals()

執行順序:

首先判斷hashcode()值是否相同

是:繼續執行equals(),看其返回值

是true:說明元素重複,不新增

是false:就直接新增到集合

否:就直接新增到集合

最終:自動生成hashcode()和equals()即可

linkedhashmap

底層資料結構由鍊錶和雜湊表組成。

由鍊錶保證元素有序。

由雜湊表保證元素唯一。

hashtable

底層資料結構是雜湊表。執行緒安全,效率低

雜湊表依賴兩個方法:hashcode()和equals()

執行順序:

首先判斷hashcode()值是否相同

是:繼續執行equals(),看其返回值

是true:說明元素重複,不新增

是false:就直接新增到集合

否:就直接新增到集合

最終:自動生成hashcode()和equals()即可

treemap

底層資料結構是紅黑樹。(是一種自平衡的二叉樹)

如何保證元素唯一性呢

根據比較的返回值是否是0來決定

如何保證元素的排序呢

兩種方式

自然排序(元素具備比較性)

讓元素所屬的類實現comparable介面

比較器排序(集合具備比較性)

讓集合接收乙個comparator的實現類物件

2.關於集合選取原則

是否是鍵值物件形式:

是:map

鍵是否需要排序:

是:treemap

否:hashmap

不知道,就使用hashmap。

否:collection

元素是否唯一:

是:set

元素是否需要排序:

是:treeset

否:hashset

不知道,就使用hashset

否:list

要安全嗎:

是:vector

否:arraylist或者linkedlist

增刪多:linkedlist

查詢多:arraylist

不知道,就使用arraylist

不知道,就使用arraylist

3:集合的常見方法及遍歷方式

collection:

add()

remove()

contains()

iterator()

size()

遍歷:增強for

迭代器|--list

get()

遍歷:普通for

|--set

map:

put()

remove()

containskey(),containsvalue()

keyset()

get()

value()

entryset()

size()

遍歷:根據鍵找值

根據鍵值對物件分別找鍵和值

List set Map的底層實現原理

arraylist實現原理要點概括 參考文獻 arraylist是list介面的可變陣列非同步實現,並允許包括null在內的所有元素。底層使用陣列實現 該集合是可變長度陣列,陣列擴容時,會將老陣列中的元素重新拷貝乙份到新的陣列中,每次陣列容量增長大約是其容量的1.5倍,這種操作的代價很高。採用了fa...

CGLib實現和底層實現原理

cglib動態 底層則是借助asm來實現的。總的來說,反射機制在生成類的過程中比較高效,而asm在生成類之後的相關執行過程中比較高效 可以通過將asm生成的類進行快取,這樣解決asm生成類過程低效問題 public class sayhello public class cglibproxy imp...

Java中集合list ,set,map用法和區別

為什麼使用集合框架,而很少陣列作為儲存結構 1 陣列長度,不能動態擴容,集合框架無需宣告儲存大小,可以動態擴容 2 陣列儲存型別單一,集合框架可以儲存任何型別,加上泛型,可以避免強制轉換 3 陣列操作方法少,集合框架操作元素方法多,便於管理 常見的集合有 list集合 arraylist和linke...