Map集合總覽

2021-10-08 14:29:52 字數 3478 閱讀 6452

1.list和set繼承collection介面

map不繼承collection介面

2.list是有序的,可重複的

set是無序的,不可重複的

(這是兩者最容易記住的區別)

map是用來儲存(key,value)也就是鍵值對格式的集合

**linkedlist:**採取雙向迴圈鍊錶實現,可以用來快速插入或者刪除,但是不方便用來進行搜尋,而且執行緒不安全.

**arraylist:**採用動態陣列實現,特點:搜尋資料快

執行緒不安全

**vector:**採用動態陣列實現,特點:慢,但是執行緒安全,可以用列舉遍歷

arratlist與vector的區別

區別1:採用動態物件陣列實現的,但是底層陣列的初始大小不同

arraylist的 size() == 0

vector的 size() == 10

區別2:擴充套件容量的方式不同

arraylist 第1次擴容為10,之後 原來size()+原來size()/2 也就是1.5倍

vector 情況1:增量==0, 原來size()的2倍

情況2: 增量》0, 原來的size()+增量

arraylist 和 vector 不適合用於儲存經常需要增加和刪除

區別3:arraylist 執行緒不安全,只適合於單執行緒,效率高

vector 執行緒安全,當多執行緒的時候考慮使用

collection是介面,是list集合和set集合的父介面

collections是幫助類,這類提供一系列靜態方法去操作集合物件。

collection是單列集合,乙個元素

map是雙列集合,元素成對出現,每個元素由鍵(key)和值(value)兩個部分組成

map儲存的是鍵值對

鍵(key) 不可以重複

值(value) 可以重複

經過檢視api,發現map也有很多實現類,學習常見4個實現類

1> hashmap:底層採用雜湊表+鍊錶+紅黑樹實現

2> hashtable

3> linkedhashmap: 是hashmap的子類,在hashmap基礎上確保了元素的鏈式儲存記錄存 儲順序

4> treemap: 需要對儲存的資料進行自定義排序

注意: map有兩個泛型 在使用的時候需要為它們指定資料型別 k,v 資料型別可以一樣,也可以不一樣

map介面中的常用方法

v get(object key)根據key獲取對應的值

v put(k key, v value)向map集合中存入值 (注意,如果你要存入的值的key存在map集合中,那麼你新存入的值會覆蓋原本map集合中的值)

v remove(object key)根據key刪除鍵值對

default v replace(k key, v value)使用新值替換指定key的值

int size() map集合中鍵值對的個數

boolean containskey(object key)判斷map中是否包含指定key

boolean containsvalue(object value)判斷map集合中是否包含指定的值

boolean isempty()判斷map是否為空集合,當前僅當 size()==0

遍歷map集合中資料(把map集合中資料輸出)

方式1:先獲取所有key,再呼叫get根據key獲取值 set keyset()

//這個方法就是獲取map的所有key的值

方式2:直接獲取鍵值對 set> entryset()

// 在map介面,有乙個內部介面 entry 代表就是鍵值對

方式3:不能獲取key,只獲取所有值的方法 collection values()

hasgmap的資料結構包含了:陣列,鍊錶,雜湊表,樹

**陣列:**採用一段連續的儲存單元來儲存資料。對於指定下標的查詢,時間複雜度o(1) 但是陣列中間以及頭部插入資料時,需要複製移動後面的元素,效率比較低。

**鍊錶:**一種在物理儲存單元上非連續、非順序的儲存結構,資料元素在邏輯順序是 通過鍊錶中的指標鏈次序實現的。 鍊錶由一系列節點node組成,節點可以在執行時動態生成。每個節點 都包含 「資料域」 和 「指標域」 由於鍊錶不用按順序儲存,所以鍊錶在插入資料的時候時間複雜度o(1) 但是查詢乙個節點或者訪問特點編號的節點需要o(n)

雜湊表:根據關鍵碼值(key value) 直接進行訪問的資料。 通過把關鍵碼值對映到表中乙個位置來訪問記錄 以加快查詢的速度,這個對映函式稱為雜湊函式, 存放記錄的表(陣列)稱為雜湊表。

樹:由n(n>=1) 個有限節點組成乙個具有層次關係的集合

hashmap是map介面中最常用的實現類

public class hashmapextends abstractmapimplements map, cloneable, serializable

它是基於雜湊表實現的, 繼承了abstractmap的抽象類,並且實現了map介面,實現了轉殖和序列化,所以可以被轉殖和序列化

"雜湊表"將鍵的hash值對映到記憶體位址,即根據鍵獲取對應的值, 並將其儲存到記憶體位址,也就是說hashmap是根據鍵 的hash值來決定值的儲存位置。

通過這種索引方式,hashmap獲取資料的速度會非常快

但是會出現乙個新問題,(雜湊衝突)。

例如: 儲存鍵值對 (x,「duan」)時,雜湊表會通過"雜湊函式f(x)「得到"duan」 的實現儲存位置。 但是也會有新的問題。 如果再來乙個(y,「chunfen」)時,雜湊函式f(y)的雜湊值和上面的f(x) 雜湊值一樣,這樣發現乙個問題 兩個物件的儲存位址衝突了,這種現象就被稱為"雜湊衝突"

當發生雜湊衝突時,如果雜湊表沒有被裝滿,說明在雜湊表中必然有空的位置,那麼可以把key存放在衝突位置後面的空位置上。但是這種簡單的辦法也有缺陷,比如查詢或者擴容

方式二:"再雜湊法"

同義詞產生的位址衝突是再進行計算另乙個雜湊函式的位址,直到衝突不在發生,這種方法不易產生聚集,但是增加了計算時間,如果不考慮時間成本並且對查詢的元素要求極高的話,建議使用這種方式

方式三:"鏈位址法"

hashmap綜合所有因素,採用"鏈位址法"解決雜湊衝突

這種方法採用陣列(雜湊表)+鍊錶的資料結構

當發生雜湊衝突時,就要乙個鍊錶結構儲存相同的hash值的資料

採用除留餘數法構造雜湊函式,衝突解決採用鏈位址法。

集合框架 Map集合

map集合 同collection,是集合框架中的頂層介面。一次新增一對元素,collection一次新增乙個元素。所有,map集合也稱為雙列集合,collection集合稱為單列集合。介面map key是鍵,value是值,其實map集合中儲存的就是鍵值對,map集合中必須保證鍵的唯一性。常用方法...

Java集合 Map集合

map map 用於儲存具有對映關係的資料,因此 map 集合裡儲存著兩組值,一組值用於儲存 map 裡的 key,另外一組用於儲存 map 裡的 value map 中的 key 和 value 都可以是任何引用型別的資料 map 中的 key 不允許重複,即同乙個 map 物件的任何兩個 key...

HashSet集合,map集合

hashset集合 遍歷通過迭代器iterator遍歷 它儲存的是無序集合 不允許重複資料新增 string strs new string 10 hs.toarray strs 轉換hashset集合到strs陣列中 hashset物件去重的原理 雜湊表依賴兩個方法hashcode 和equals...