首先,HashMap是什么?
在了解HashMap之前,需要知道一个概念:
哈希表(也叫做散列表):
哈希表(Hash Table)是一种数据结构,按照哈希函数思想建立的映射关系。
存储位置=哈希函数(关键字)
HashMap:
一个用于存储Key-Value键值对的集合,每一个键值对也叫做Entry。是java中用哈希表实现的一种Map。
HashTable:
HashTable也是一种存储Key-Value键值对的集合。
HashTable是较早的使用Hash算法的容器结构,现已基本被淘汰,单线程使用HashMap,多线程使用ConcurrentHashMap。
HashMap和HashTable的区别:
(1)继承
HashTable继承Dictionary,HashMap继承AbstractMap,两者都实现了Map接口。
(2)同步
HashTable中的方法是同步的,HashMap中的方法在缺省情况下是不同步的。
(3)key和value值
HashTable的key和value都不能为null,HashMap的key值可以为null,但只能有一个是null,HashMap的value值可以有多个为null。
(4)遍历方式的内部实现
HashTable和HashMap都使用了迭代器Iterator,而HashTable还使用了枚举Enumaration
(5)哈希值
HashTable直接使用对象的哈希值,而HashMap需要重新计算哈希值。
(6)内部实现方式的数组的初始大小和扩容的方式
HashTable中hash数组默认大小是11,增加的方式是 old*2+1。HashMap中hash数组的默认大小是16,是2的指数。
以及,谈到了key、value的值,就顺便说一下Map集合类key和value取值情况
Map集合类 | key | value |
|
|
|
|
|
|
|
|
|
|
|
|