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...