HashMap常见面试题

HashMap 的数据结构?

  • 在JDK1.7里面,使用数组+链表的数据结构
  • 在JDK1.8里面,使用数组+链表/红黑树的数据结构

在HashMap中,当两个key对象的 hashCode 相同会发生什么?

两个key的hashCode相同,则会发送hash碰撞

JDK8中对HashMap做了哪些改变?

  1. 在java 1.8中,如果链表的长度超过了8,那么链表将转换为红黑树。(桶的数量必须大于64,小于64的时候只会扩容)
  2. 发生hash碰撞时,java 1.7 会在链表的头部插入,而java 1.8会在链表的尾部插入
  3. 在扩容时,JDK1.7会使桶内链表的顺序颠倒,JDK1.8基本保持桶内键值对的顺序。

HashMap 和 HashTable 有什么区别?

  1. HashMap 是线程不安全的,HashTable 是线程安全的;
  2. 由于线程安全,所以 HashTable 的效率比不上 HashMap;
  3. HashMap最多只允许一条记录的键为null,允许多条记录的值为null,而 HashTable不允许;
  4. HashMap 默认初始化数组的大小为16,HashTable 为 11,前者扩容时,扩大两倍,后者扩大两倍+1;
  5. HashMap 需要重新计算 hash 值,而 HashTable 直接使用对象的 hashCode

hash冲突你还知道哪些解决办法?

比较出名的有四种(1)开放定址法(2)链地址法(3)再哈希法(4)公共溢出区域法

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容