美文网首页
关于HashMap的几个问题

关于HashMap的几个问题

作者: 最美的风景 | 来源:发表于2019-11-16 21:02 被阅读0次

一、HashMap的哈希桶的初始大小是多少?

初始大小为16,并且必须为2的n次方

二、java 7 和 java 8 对于HashMap的实现有何不同?

java 7 实现方式: 数组 + 链表
java 8 实现方式: 数组 + 链表 / 红黑树(链表长度大于8)

Java 7 HashMap 存在的问题
1、并发环境下非常容易碰到死锁
2、由于hashcode算法缺陷,HashMap容易产生链表,影响性能的同时存在安全隐患
Java 8 HashMap的改进
扩容时插入顺序保持不变,防止出现环形链表,形成死循环
HashMap 扩容时的效率很低,所以在创建HashMap时就指定初始容量,避免频繁的扩容带来的性能问题,用空间换时间。

三、为什么HashMap哈希桶的大小必须为2的n次方?

在将一个元素put进一个HashMap时,需要计算其在数组中的下标,在调用该对象的hashcosd方法后算出一个int值,即为该元素的hash值,要根据该hash值来确定元素在数组中的位置,采用的算法是按位与运算: hashcode & (array.length-1) 只有桶的大小为2的幂,array.length-1得到的值二进制永远全部都是1,这样计算出来的下标分布均匀并且快速;反之,如果array.length-1得到的值二进制中存在0,做按位于运算后永远都是0,,则有些下标位置永远都会空着。

相关文章

  • 关于HashMap的几个问题

    一、HashMap的哈希桶的初始大小是多少? 初始大小为16,并且必须为2的n次方 二、java 7 和 java...

  • Android - 关于HashMap的几个问题

    1. HashMap的结构和初始值: 主体结构为数组 Node[] table,每个数组上存储的是单链...

  • HashMap源码分析

    本文主要针对HashMap的以下几个问题展开分析,由浅入深,由使用到原理,上下关联,尽量把HashMap的实现原理...

  • 【老实李】HashMap的底层原理探索

    通过几个问题来学习HashMap 前提大家都知道,HashMap是由哈希表实现的,哈希表就是由数组和链表组成的。 ...

  • HashMap源码分析

    hashmap的分析网上优秀的文章有很多,个人比较推荐美团技术博客上关于hashmap的介绍。由于hashmap广...

  • HashMap、HashTable、ConcurrentHash

    希望各位小伙伴能带着如下几个问题来进行阅读,这样收获会更大。 HashTable、HashMap、Concurre...

  • 源码修炼笔记之HashMap源码解析

    HashMap高频面试题 HashMap备受面试官的青睐,笔者几乎每次面试都会遇到关于HashMap的问题,整理出...

  • ConcurrentHashMap源码分析(JDK8)

    导入 ConcurrentHashMap是HashMap的线程安全版本的实现版本,关于HashMap的分析总结,可...

  • jdk1.8 HashMap红黑树源码解析

    这篇博客主要讲解HashMap1.8的新增特性:红黑树,关于HashMap的其他内容推荐博客HashMap真的教科...

  • HashMap解读

    相信大家对HashMap都非常熟悉, 网上也有很多关于hashmap的源码解析, 此文仅记录本人对HashMap的...

网友评论

      本文标题:关于HashMap的几个问题

      本文链接:https://www.haomeiwen.com/subject/gscuictx.html