Map的概述
Map是一个接口,提供了一种映射关系,其中的元素都是以键值对的形式存储的,能够根据key快速找到value
特点:键(key)不能重复,值(value)可以重复
HashTable 和 HashMap 的概述
- 二者底层的数据结构实现都是链表+数组的方式实现的
- HashTable继承了 Dictionary,但是这个类已经过时了,一般我们现在都是实现的Map接口,而不是扩展Dictionary这个类。HashTable实现了一个哈希表,它将键(key)映射到值(value)。任何非null对象都可以用作键值或值,即HashTable不允许(key或value)为空值。
- HashMap是Map接口的实现类,基于哈希表的实现的Map接口,不保证映射顺序,即键(key)无序且唯一,值有序且可重复,HashMap允许设置键(key)和值(value)设置为空值
同步问题比较
- HashTable是同步的,即线程安全,使用synchronize来实现同步问题。
- HashMap是不同步的,即线程不安全,因此效率比HashTable要高。
遍历方式的区别
- HashTable使用Iterator和Enumeration来进行遍历
- HashMap使用Iterator来遍历
扩容机制
- HashTable默认容量大小为11;默认的加载因子为0.75、当数据存储达到:11*0.75=8阈值的时候开始扩容,扩容方法为(原来的容量*2+1)
- HashMap默认容量大小为16,加载因此默认为0.75,当数据存储到达16*0.75=12阈值的时候开始进行扩容,扩容方法为(原来的容量*2)