三、HashMap与HashTable

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不容许。

相关文章
相关标签/搜索