java map与set的区别_java 集合(list,set,map)三者之间的关系和区别
原
java 集合(list,set,map)三者之間的關(guān)系和區(qū)別
一:先上一張關(guān)系圖,讓大家看的更明白。
備注:其中紅色部分為實(shí)現(xiàn),其他地方均為接口。
二:各自的特點(diǎn)。
List 有序,可重復(fù)ArrayList優(yōu)點(diǎn):?底層數(shù)據(jù)結(jié)構(gòu)是數(shù)組,查詢快,增刪慢。缺點(diǎn):?線程不安全,效率高Vector優(yōu)點(diǎn):?底層數(shù)據(jù)結(jié)構(gòu)是數(shù)組,查詢快,增刪慢。缺點(diǎn):?線程安全,效率低LinkedList優(yōu)點(diǎn):?底層數(shù)據(jù)結(jié)構(gòu)是鏈表,查詢慢,增刪快。缺點(diǎn):?線程不安全,效率高
Set 無(wú)序,唯一
HashSet
底層數(shù)據(jù)結(jié)構(gòu)是哈希表。(無(wú)序,唯一)
如何來(lái)保證元素唯一性?
1.依賴兩個(gè)方法:hashCode()和equals()
LinkedHashSet
底層數(shù)據(jù)結(jié)構(gòu)是鏈表和哈希表。(FIFO插入有序,唯一)
1.由鏈表保證元素有序
2.由哈希表保證元素唯一
TreeSet
底層數(shù)據(jù)結(jié)構(gòu)是紅黑樹(shù)。(唯一,有序)
1. 如何保證元素排序的呢?
自然排序,比較器排序
2.如何保證元素唯一性的呢?
根據(jù)比較的返回值是否是0來(lái)決定
三:我們?cè)趺磥?lái)使用。
針對(duì)Collection集合我們到底使用誰(shuí)呢?
唯一嗎?
是 > set > 排序嗎 ?
是:TreeSet或LinkedHashSet
否:HashSet
否 > list > 要安全嗎?
是:vector
否:ArrayList 或 LinkedList
四:Map。
有序:TreeMap
無(wú)序:HashMap和HashTable
HashMap
jdk1.7 底層為數(shù)組+單鏈
jdk1.8 底層為數(shù)組+單鏈+紅黑樹(shù),默認(rèn)長(zhǎng)度為16,為什么是16不是其他的數(shù)字呢,只要是2的次冪就可以了。負(fù)載因子為0.75,當(dāng)鏈表的長(zhǎng)度大于8時(shí),轉(zhuǎn)為紅黑樹(shù)。
LinkedList
LinkedList是基于鏈表的,它是一個(gè)雙向鏈表,每個(gè)節(jié)點(diǎn)維護(hù)了一個(gè)prev和next指針。同時(shí)對(duì)于這個(gè)鏈表,維護(hù)了first和last指針,first指向第一個(gè)元素,last指向最后一個(gè)元素。LinkedList是一個(gè)無(wú)序的鏈表,按照插入的先后順序排序,不提供sort方法對(duì)內(nèi)部元素排序。
HashSet
HashSet是基于HashMap來(lái)實(shí)現(xiàn)的,操作很簡(jiǎn)單,更像是對(duì)HashMap做了一次“封裝”,而且只使用了HashMap的key來(lái)實(shí)現(xiàn)各種特性,而HashMap的value始終都是PRESENT。
HashSet不允許重復(fù)(HashMap的key不允許重復(fù),如果出現(xiàn)重復(fù)就覆蓋),允許null值,非線程安全。
總結(jié)
以上是生活随笔為你收集整理的java map与set的区别_java 集合(list,set,map)三者之间的关系和区别的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: java holdslock_一种检测J
- 下一篇: mongodb java id 查询数据