最近改**的時候想要找乙個get 和 put 方法效率比較的map,所以常看了1.6的api,現作出如下的比較:
linkedhashmap
hashmap
treemap
identityhashmap
enummap
實現原理
1.
雙向列表和
hash
2.維護了乙個
key的雙向列表
3.hash
紅黑樹使用引用相等的比較法則,而不是物件相等,也就是引用的要是記憶體中的統一實體地址
chaining hash
實現(http://oopweb.com/algorithms/documents/plds210/volume/hash_tables.html)1.
key的值必須是統一個列舉型別
2.陣列實現
執行緒安全
否
否否否否
元素的順序
1.
key的遍歷順序就是插入的順序
2.重新插入同乙個
key值是不會影響它的位置
3.元素的順序不一定一直一樣
插入的元素都是按一定順序排序的,可自定義比較的方法
元素的順序不一定一直一樣
元素的順序萬為列舉型別宣告的順序
一致性
iterator
被建立後,除了通過
iterator
的方法修改
map,其他形式的修改都會導致
iterator
報concurrentmodificationexception
的異常,但是這個也不是可靠的
iterator
被建立後,除了通過
iterator
的方法修改
map,其他形式的修改都會導致
iterator
報concurrentmodificationexception
的異常,但是這個也不是可靠的
iterator
被建立後,除了通過
iterator
的方法修改
map,其他形式的修改都會導致
iterator
報concurrentmodificationexception
的異常,但是這個也不是可靠的
iterator
被建立後,除了通過
iterator
的方法修改
map,其他形式的修改都會導致
iterator
報concurrentmodificationexception
的異常,但是這個也不是可靠的
建立iterator
後改變map
的值,也不會有異常,一致性不能保證
key
和
value
的取值
允許
key
和value
為null 允許
key
和value
為null
key不允許為
null
,value
可以是null 允許
key
和value
為null
不允許key
為null
,value
可以為null
其他
用這個map重新生成乙個
key順序一樣的
map,不管這個
map的實現是什麼,如
(new linkedhashmap(***map)),
這樣生成的
map元素順序和原來一致
1.初始的容量和負載因子影響效能,預設的負載因子是
0.75
,增大這個值減少了使用的空間,但是增加了
get
和set
的時間2.
get
和put
的時間複雜度為
o(1) 1.
get put remove
的時間複雜度為
o(log(n)) 1.
map的大小是重要的效能指標,如果超過
map最大的範圍,那麼要花很大的代價去加長這個
map 2.
比hashmap
效能好
java中Map的常用方法
map是以鍵值對的方式儲存資料的集合,鍵不可以重複,每個鍵只能對應乙個值 containskey object key containsvalue object value 判斷map中是不是含有相應的key,value entryset 返回map中的對映關係的set檢視set 可以理解為是將ma...
java中的Map以及常用子類
map 主要用於儲存健值對,根據鍵得到值,因此不允許鍵重複 重複了覆蓋了 但允許值重複。hashmap 根據鍵的 hashcode 值儲存資料 根據鍵可以直接獲取它的值,具有很快的訪問速度,遍歷時,取得資料的順序是完全隨機的。hashmap 最多隻允許一條記錄的鍵為 null 允許多條記錄的值為 n...
map和hash map的比較
hash map和map的區別在 建構函式。hash map需要hash函式,等於函式 map只需要比較函式 小於函式 儲存結構。hash map採用hash表儲存,map一般採用紅黑樹 rb tree 實現。因此其記憶體資料結構是不一樣的。什麼時候需要用hash map,什麼時候需要用map?ha...