1、數組
數組:安全
存儲區間是連續的,佔內存嚴重線程
易查找、插入刪除困難繼承
鏈表:接口
存儲區間是離散的,佔內存少內存
難查找,插入刪除容易hash
哈希表:io
查找易、插入刪除也易table
原理:效率
hash表是由 數組+鏈表 組成的
一個長度爲16的數組中,每一個元素存儲的是一個鏈表的頭結點。這些元素是按照什麼樣的規則存儲到數組中呢。通常狀況是經過hash(key)%len得到,也就是元素的key的哈希值對數組長度取模獲得。好比上述哈希表中,12%16=12,28%16=12,108%16=12,140%16=12。因此十二、2八、108以及140都存儲在數組下標爲12的位置。
首先HashMap裏面實現一個靜態內部類Entry,其重要的屬性有 key , value, next,從屬性key,value咱們就能很明顯的看出來Entry就是HashMap鍵值對實現的一個基礎bean,咱們上面說到HashMap的基礎就是一個線性數組,這個數組就是Entry[],Map裏面的內容都保存在Entry[]裏面。
2、
Hashtable 繼承自 Dictionary 而 HashMap繼承自AbstractMap
hashtable線程安全、hashMap線程不安全,因此hashmap效率要稍微高一些
HashMap是Hashtable的輕量級實現(非線程安全的實現),他們都完成了Map接口,
主要區別在於HashMap容許空(null)鍵值(key),因爲非線程安全,效率上可能高於Hashtable。
HashMap容許將null做爲一個entry的key或者value,而Hashtable不容許。