`
wcn
  • 浏览: 1613 次
  • 性别: Icon_minigender_2
最近访客 更多访客>>
社区版块
存档分类
最新评论

hashmap的扩容机制

    博客分类:
  • java
阅读更多
源代码查看,有三个常量,
static final int DEFAULT_INITIAL_CAPACITY = 16;
static final int MAXIMUM_CAPACITY = 1 << 30;
static final float DEFAULT_LOAD_FACTOR = 0.75f;
三个常量中可以看出,默认的容器大小是16,最大长度是2的30次方,load factor默认是0.75,扩充的临界值是16*0.75=12
当我们往HashMap中put元素的时候,先根据key的hashCode重新计算hash值,根据hash值得到这个元素在数组中的位置(即下标),如果数组该位置上已经存放有其他元素了,那么在这个位置上的元素将以链表的形式存放,新加入的放在链头,最先加入的放在链尾。如果数组该位置上没有元素,就直接将该元素放到此数组中的该位置上。
那么hashmap什么时候进行扩容呢?当hashmap中的元素个数超过数组大小*loadFactor时,就会进行数组扩容,loadFactor的默认值为0.75,也就是说,默认情况下,数组大小为16,那么当hashmap中元素个数超过16*0.75=12的时候,就把数组的大小扩展为2*16=32,即扩大一倍,然后重新计算每个元素在数组中的位置,而这是一个非常消耗性能的操作,所以如果我们已经预知hashmap中元素的个数,那么预设元素的个数能够有效的提高hashmap的性能。
分享到:
评论

相关推荐

    ArrayList集合与HashMap的扩容原来.docx

    在 add(e) 方法中又掉用了三个参数的方法 add(e, element, size),在这判断 elementDate 的长度是否等于 size 的大小,如果等于则触发扩容机制,将原数组的长度(加上原数组长度向右移动一位)扩容为 1.5 倍,在将原...

    java的hashMap多线程并发情况下扩容产生的死锁问题解决.docx

    此外,引入了ConcurrentHashMap类,这是一个专门为多线程设计的高效容器,其内部使用分段锁策略,可以在并发环境下保证线程安全,避免了类似HashMap扩容引发的死锁问题。 如果你在多线程环境中使用HashMap并遇到...

    深入探讨HashMap的底层结构、原理、扩容机制.pdf

    深入探讨HashMap的底层结构、原理、扩容机制,

    java HashMap扩容详解及实例代码

    HashMap扩容的主要原因是避免过多的哈希冲突,从而保持查询性能。默认情况下,HashMap的初始容量为16,加载因子设置为0.75。这意味着当HashMap中元素的数量达到16 * 0.75 = 12时,如果还有新的元素插入且哈希冲突...

    ArrayList及HashMap的扩容规则讲解

    今天,我们将深入探讨ArrayList及HashMap的扩容规则,以便更好地理解它们的工作机制。 一、ArrayList的扩容规则 ArrayList的默认大小为10,最大容量为2^30 - 8。ArrayList的扩容规则是oldCapacity*1.5,即每次扩容...

    HashMap之resize()方法源码解读.docx

    下面我们将对HashMap的resize()方法进行源码解读,了解其扩容机制和原理。 一、resize()方法概述 resize()方法的主要功能是扩容HashMap的容量,以便存储更多的键值对。该方法分为两部分:创建新数组和将旧数组元素...

    Java面试最新知识点问答

    本文总结了 Java 面试中的一些最新知识点,涵盖了 Java 集合框架、HashMap扩容机制、B树和B+树的区别、CopyOnWriteArrayList 的原理、BlockingQueue 等方面的知识点。 一、Java 集合框架 Java 集合框架主要包括 ...

    杭州阿里云Java实习生岗位面试真题

    4. **HashMap扩容机制**: 当HashMap中的元素数量达到初始容量的负载因子(默认为0.75)时,会进行扩容。扩容时,新的容量通常是旧容量的两倍。扩容过程会将旧数组中的所有元素重新分布到新数组中,这可能导致性能...

    Java中HashMap的工作机制

    值得注意的是,由于HashMap的Entry数组是动态扩容的,数组的长度会根据实际存储的键值对数量进行增长,以保持较低的哈希冲突率。但是,在数组扩容时,所有的键值对都需要重新计算哈希值并分配到新的位置,这个过程...

    HashMap原理分析及性能优化

    HashMap 的 put 方法分析六.HashMap扩容机制七.HashMap线程安全性 一.HashMap是什么 HashMap是Java程序员使用频率最高的用于映射(键值对)处理的数据类型。 HashMap是一个用于存储Key-Value键值对的集合,每一个...

    2022 最全 Java 面试笔试题汇总

    HashMap 扩容机制是什么? 集合类 * 集合类中的 List 和 Map 的线程安全版本是什么?如何保证线程安全的? * HashMap 的数据结构是什么?如何实现的?与 HashTable、ConcurrentHashMap 的区别是什么? IO * BIO...

    HashMap源码粗略解读(面试必问)

    同时,`loadFactor`是扩容因子,其默认值是0.75f,即当Map的元素数量达到容量的75%时,HashMap会触发扩容。 2. **HashMap如何扩容** 当HashMap中的元素数量达到当前容量的`loadFactor`(默认0.75f)时,会进行扩容...

    JAVA面试八股文.pptx

    - **HashMap扩容机制**: 当容量达到负载因子(默认0.75)时,会进行扩容,新的容量为旧容量的2倍加1。 - **ConcurrentHashMap扩容机制**: 分段锁策略,每个段有自己的哈希表,扩容时仅影响到特定段。 2. **JVM** ...

    Java魔法解密:揭秘HashMap底层机制.pptx.pptx

    **HashMap的扩容机制** HashMap的容量在初始化时设定,当存储的元素数量超过容量与负载因子(默认为0.75)的乘积时,HashMap会进行扩容。扩容过程涉及到创建一个更大的新数组,并将旧数组中的所有元素重新计算哈希...

    2022面试题1java背诵版本.doc

    3. **HashMap扩容机制**:当HashMap达到其容量的75%时,会进行扩容,新容量为旧容量的2倍。扩容过程会导致元素重新分布,可能会降低性能。 4. **ConcurrentHashMap存储结构**:它使用分段锁技术,将整个哈希表分为...

    HashMap介绍和使用

    ### HashMap介绍和使用详解 #### 一、HashMap的数据结构 ...此外,HashMap还提供了自动扩容机制来应对不断增长的数据量,确保了在大多数场景下的高效性。理解HashMap的工作原理对于优化Java程序的性能具有重要意义。

    2022面试题目java背诵版本

    3. **HashMap扩容机制**: 当HashMap达到其容量的75%时,会进行扩容,新的容量是原容量的2倍。这个过程涉及所有元素的重新哈希,可能导致一定的性能开销。 4. **ConcurrentHashMap的存储结构**: ...

    HashMap与HashTable的区别(含源码分析)

    如果在多线程环境中使用,需要程序员自己实现同步机制,如使用`synchronized`关键字或者`Collections.synchronizedMap()`。 2. null值处理: - `HashTable`不允许键或值为null,如果尝试插入null,会抛出`...

    hashmap实现原理

    总结来说,HashMap的核心在于它的哈希策略和动态扩容机制。通过`hashCode()`和`equals()`的合理使用,以及数组和链表的结合,HashMap实现了高效的键值对存储和查找。了解这些实现细节对于优化代码性能和避免潜在问题...

Global site tag (gtag.js) - Google Analytics