首先,從jdk原始碼來看,hashmap和hashtable都實現了map介面:
可以看出,hashtable是從jdk1.0就有的,hashmap而是從jdk1.2才有的。
二者實現的介面一致。
因此,對外方法api也基本一致:
內部儲存方式也基本一致,都是鄰接表形式:
基本操作也基本一致,以put方法為例,都是先算key的hashcode,然後以【hashcode%陣列長度】求出放在陣列中的索引位置,如果此位置已經有entry,則把當前entry插入到此鍊錶的頭結點,如果此位置為空,則把entry直接放到該位置。
總而言之,二者所有的操作基本都一致,只有一點不同,就是hashtable的每個方法都是執行緒同步的,都加了synchronized修飾符,而hashmap不是。因此hashmap在被多執行緒共享操作時,會有多執行緒的問題,最嚴重的問題是會死迴圈,具體見下篇文章。
HashMap的工作原理和hashtable區別
1.hashmap的工作原理?hashmap底層是陣列 鍊錶 以陣列儲存元素,如有hash相同的元素,在陣列結構中,建立鍊錶結構,再把hash相同的元素放到鍊錶的下乙個節點 基於hashing 雜湊法 雜湊法 是一種將字元組成的字串轉換為固定長度的數值或索引值的方法 的原理。通過put get 方法...
HashMap基礎與併發
執行緒不安全的hashmap,hashmap在併發執行put操作時會引起死迴圈,是因為多執行緒會導致hashmap的entry鍊錶形成環形資料結構,查詢時會陷入死迴圈。預設初始化大小為16,之後每次擴充,容量變為原來的2倍 預設載入因子為0.75 modcount作用 迭代器每修改一次就 1 has...
基礎才是重中之重 執行緒安全的Hashtable
執行緒安全就是多執行緒訪問時 web網頁多使用者訪問乙個頁面時 採用了加鎖機制,當乙個執行緒訪問該類的某個資料時,進行保護,其他執行緒不能進行訪問直到該執行緒讀取完,其他執行緒才可使用。不會出現資料不一致或者資料汙染。hashtable 表示鍵 值對的集合,這些鍵 值對根據鍵的雜湊 進行組織,它的k...