Java核心篇之HashMap--day6
Java核心篇之HashMap–day6
HashMap是一種鍵值對的數據結構,以數組與鏈表的形式(key:value)實現,查詢性能和添加性能很好。他是通過將key進行hashcode()映射函數來找到表中對應的位置。
HashMap和Hashtable與LinkedHashMap以及TreeMap的區別:
底層都是基于數組和鏈表來實現的;
HashMap是非線程安全的,HashTable是線程安全的,修改數據的時候鎖住整個Hashtable。
HashMap的鍵和值都允許有null值存在,而HashTable則不行。
HashMap效率比HashTable的要高。
初始值大小:
Hashtable:size為11,擴容為:2size+1;
HashMap:size為16,擴容為:2size(2的n次冪)
Hashtable是基于synchronized關鍵字,鎖住的是整個表,而concurrentHashMap是基于lock操作,這樣的目的是保證同步的時候,鎖住的不是整個對象。
ConcurrentHashMap基于concurrentLevel劃分出了多個Segment來對key-value進行存儲,從而避免每次鎖定整個數組,允許多個線程并發無阻塞的操作集合對象,盡可能地減少并發時的阻塞現象。
LinkedHashMap:基本和HashMap實現類似,多了一個鏈表來維護元素插入的順序,因此維護的效率會比HashMap略低。但是因為有鏈表的存在,遍歷效率會高于HashMap。
LinkedHashMap和TreeMap
1.LinkedHashMap能夠保持記錄的插入順序,用iterator來遍歷LinkedHashMap時,先得到的記錄是先插入的記錄,它包含了HashMap的其他特性。
2.TreeMap能夠將它保存的記錄根據鍵進行排序,默認為升序。用iterator進行遍歷的時候,得到的記錄都是排好序的。其鍵和值都不能為空。
3.HashSet是根據HashMap來實現的,TreeSet是根據TreeMap來實現的,只不過set用的是map的key;map的key和set的共性就是集合的唯一性,其中TreeMap多了一個排序的功能。
HashSet,TreeSet,LinkedHashSet的區別;
1.HashSet類似于HashMap,至多只能有一個值為null,存入的元素是無序的,并且不能重復;
2.LinkedHashSet至多只能有一個值為null,元素嚴格按照放入的順序排列
3.TreeSet不能有null值,根據元素的自然順序進行排序
總結
以上是生活随笔為你收集整理的Java核心篇之HashMap--day6的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java 多线程 —— wait 与 n
- 下一篇: Swagger自动接口文档生成框架———