面试题:HashTable和HashMap的区别:
- 父类不同,HashTable继承了Dictionary,HashMap继承了AbstractMap;
- 版本不同,HashTable出现于jdk版本1.0,HashMap出现于jdk版本1.2;
- 对null的支持不同,HashMap键值对可以为null,HashTable键值都不可以;
- 效率不同,HashTable效率较低,HashMap效率较高;
- 线程安全不同:HashTable线程安全,HashMap线程不安全(因为HashTable里面每一个方法都加了synchronized而HashMap里面没有);
- 初始容量不同,HashTable初始容量是11,HashMap初始容量是16;
- 扩容速度不同:HashMap是原来的2倍,HashTable是原来的2n+1倍;
- HashCode重写方式不同:HashTable计算复杂,HashMap计算简单。
HashMap不安全的情况:HashMap在程序里面当成共享变量使用时,多线程和单线程的执行结果有可能不一样。而HashTable不会,因为他里面每一个方法都加了锁。
重点:HashMap底层原理是:数组加链表
key为null的话直接存储在下标为0的位置