版權(quán)聲明:本文為作者原創(chuàng)拌喉,轉(zhuǎn)載必須注明出處诵姜。
轉(zhuǎn)載請注明出處:http://www.reibang.com/p/fec3a8c3cc9b
Set:體現(xiàn)集合的概念同辣,無序弯屈、唯一性。適合做交娜扇、差错沃、并、補(bǔ)的操作
1)HashSet : hashMap實(shí)現(xiàn)雀瓢,基于散列表枢析,存儲(chǔ)無序。
判斷重復(fù)的標(biāo)準(zhǔn):先hashCode再equals 計(jì)算得到的hash值相同的話則會(huì)造成散列沖突
2)TreeSet : treeMap ? 基于排序樹刃麸,key 有序(升或降):要求存入的元素具備比較大小的能力
3)LinkedHashSet :? LinkedHashMap醒叁, 值是按插入的順序有序的輸出
add方法:添加的值做為對應(yīng)map的key,value是 new Object();
List: 有序、可重復(fù)的線性結(jié)構(gòu)
1)ArrayList: 動(dòng)態(tài)數(shù)組: 通過 System.arraycopy來實(shí)現(xiàn)泊业,改查高效把沼。
如果超過當(dāng)前的數(shù)組的存儲(chǔ)長度,那么新建一個(gè)數(shù)組長度為之前長度的1.5倍吁伺,
2) LinkedList: 雙向鏈表, 增刪高效饮睬。
3) Vector: 動(dòng)態(tài)數(shù)組? 也是通過 System.arraycopy來實(shí)現(xiàn)? ,安全性源于方法都加了鎖
Map:體現(xiàn)的是函數(shù)的概念:若對X中的每個(gè)x篮奄,按對應(yīng)法則f捆愁,使Y中存在唯一的一個(gè)元素y與之對應(yīng) 割去, 就稱對應(yīng)法則f是X上的一個(gè)函數(shù),記作y=f(x),體現(xiàn)一種映射關(guān)系
HashMap:無序輸出昼丑;
TreeMap: 按Key排序輸出;
LinkedHashMap:根據(jù)輸入的順序輸出;
HashTable和HashMap區(qū)別 :
HashMap幾乎可以等價(jià)于Hashtable呻逆,除了HashMap是非synchronized的,并可以接受null(HashMap可以接受為null的鍵值(key)和值(value)菩帝,而Hashtable則不行.
HashMap的數(shù)據(jù)結(jié)構(gòu)
HashMap的底層主要是基于數(shù)組和鏈表來實(shí)現(xiàn)的咖城,它之所以有相當(dāng)快的查詢速度主要是因?yàn)樗峭ㄟ^計(jì)算散列碼來決定存儲(chǔ)的位置。HashMap中主要是通過key的hashCode來計(jì)算hash值的呼奢,只要hashCode相同宜雀,計(jì)算出來的hash值就一樣。如果存儲(chǔ)的對象對多了控妻,就有可能不同的對象所算出來的hash值是相同的州袒,這就出現(xiàn)了所謂的hash沖突。學(xué)過數(shù)據(jù)結(jié)構(gòu)的同學(xué)都知道弓候,解決hash沖突的方法有很多,HashMap底層是通過鏈表來解決hash沖突的他匪。
圖中菇存,紫色部分即代表哈希表,也稱為哈希數(shù)組邦蜜,數(shù)組的每個(gè)元素都是一個(gè)單鏈表的頭節(jié)點(diǎn)依鸥,鏈表是用來解決沖突的,如果不同的key映射到了數(shù)組的同一位置處悼沈,就將其放入單鏈表中贱迟。