HashMap和HashTable的区别(面试题)
概念
HashMap
基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作,并允许使用 null 值和 null 键。(除了非同步和允许使用 null 之外,HashMap 类与 Hashtable大致相同。)此类不保证映射的顺序,特别是它不保证该顺序恒久不变。
HashTable
散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。
对比
\ |
HashMap |
HashTable |
线程同步(安全) |
× |
√ |
key/value null |
√ |
× |
数组默认长度 |
16(增长方式为2的指数倍) |
11(增长方式为old*2+1) |
遍历 |
Iterator |
Enumeration |
父类 |
AbstractMap |
Dictionary |
总结
线程安全这一点应该绝大部分人都能答出来,null作为kv这一点则容易忽略,但一点又能很快想起。另外也需要掌握底层数组的默认长度和扩容方式,以及遍历涉及的迭代器和枚举。