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