面试准备 --- HashTable

为了春招,系统地复习一下Java相关的知识,应该不会写源码解析,完全是给自己看的,如果足够幸运,有幸进入大厂,重新写下给别人看的

注意点

  • HashTable和HashMap都实现了Map接口,所以需要对比着说

  • HashTable也是使用拉链法,即底层使用数组和链表实现哈希表.

  • 默认值可能有些不同

    • HashTable的底层数组的初始长度为11
    • 负载因子一样,都是0.75
    • 扩容大小是2倍旧长度+1
  • HashTable的hash算法和hashMap不同,是这样计算的(hash & 0x7FFFFFFF) % tab.length,tab就是底层数组,hash就是对象的hashcode值,说实话,不对这样的计算并不是很理解,就不卖弄了.

  • 说一下区别吧

    • HashTable底层数组长度没有2的n次方的要求,看初始长度就知道了
    • HashTable的键值都不允许为null,如果为null,会直接报空指针异常,而hashMap可以.
    • HashTable是线程安全的,通过同步方法来实现,虽然都说多线程下使用HashTable代替hashMap,但是我并不喜欢HashTable,主要是它的锁粒度太大了,我觉得小程序还好,稍微要求并发量的程序可能都不能达到要求.
  • HashTable我没有说太多,一是我使用的很少,二是有些操作就是链表的操作,和我在HashMap中说的其实很象,可以看下这篇

猜你喜欢

转载自blog.csdn.net/qq_36865108/article/details/86641073