`

HashMap扩容

阅读更多

HahMap什么时候扩容呢?

(1)当map中k-v总数即下面的size大于threshold 的时候

if (++size > threshold)

 

            resize();

 

(2)

table=null或者table.length =0

 

threshold 是个什么?

HahMap在初始化的时候给threshold的赋值:

 this.threshold = tableSizeFor(initialCapacity);

 

//下面的方法用于找到>=cap的最小的2的幂

static final int tableSizeFor(int cap) {

        int n = cap - 1;

        n |= n >>> 1;

        n |= n >>> 2;

        n |= n >>> 4;

        n |= n >>> 8;

        n |= n >>> 16;

        return (n < 0) ? 1 : (n >= MAXIMUM_CAPACITY) ? MAXIMUM_CAPACITY : n + 1;

    }

 

使用HashMap的默认构造方法时候,当往map中put元素的时候首先会执行resize方法将threshols设置成

newThr = (int)(DEFAULT_LOAD_FACTOR * DEFAULT_INITIAL_CAPACITY);



 

参考:

http://blog.csdn.net/fan2012huan/article/details/51097331

  • 大小: 12.1 KB
分享到:
评论

相关推荐

    HashMap扩容时的rehash方法中(e.hash & oldCap) == 0算法推导.docx

    这里我们将详细讨论在HashMap扩容时`rehash`方法中`(e.hash & oldCap) == 0`这一算法的推导。 首先,`e.hash`是HashMap中某个元素的哈希值,它由键对象的`hashCode()`方法计算得出,通常是键对象的哈希码右移16位后...

    HashMap扩容死循环问题源码分析.mp4

    详 解 hashmap 1.7 扩 容 机 制 的 数 据 迁 移 以 及 出 现 环 形 列 表 导 致 死 锁 情 况 视 频

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

    HashMap扩容原理 HashMap 的底层原理是哈希表,哈希表是由数组加链表加红黑树组成。在没有添加数据的时候 HashMap 的底层的 Nod[0] 数组长度为 0。当第一次掉用 put() 方法时,数组就会自动的扩容为 16,加载因子为...

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

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

    java HashMap扩容详解及实例代码

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

    Java8 HashMap扩容算法实例解析

    Java 8 HashMap 扩容算法实例解析 以下是 Java 8 HashMap 扩容算法的详细解析: 1. 扩容算法的入口:resize() 方法 在 Java 8 中,HashMap 的扩容算法主要集中在 resize() 方法中。该方法将旧的数组扩容到新的...

    ArrayList及HashMap的扩容规则讲解

    ArrayList及HashMap的扩容规则讲解 ArrayList及HashMap是Java中两个常用的数据结构,分别用于存储数组和键值对数据。今天,我们将深入探讨ArrayList及HashMap的扩容规则,以便更好地理解它们的工作机制。 一、...

    JAVA hashmap 负载因子为什么是0.75,官方解释

    java hashmap 扩容因子为什么是0.75,官方给出的解释

    2019年_BATJ大厂面试题总结-字节跳动篇

    1.hashmap,hashmap扩容是需要重新哈希吗?如果二次哈希后还是哈希冲突呢? 答案:...

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

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

    集合常见面试题

    hashmap扩容时每个entry需要再计算一次hash吗? hashmap的数组长度为什么要保证是2的幂? 如何用LinkedHashMap实现LRU? 如何用TreeMap实现一致性hash? ConcurrentHashMap是如何在保证并发安全的同时提高性能? ...

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

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

    hashmap_use_in_JDK7.zip

    8. ** resize()方法**:这是HashMap扩容的核心方法,它负责创建新数组并进行元素迁移。在JDK7中,resize()方法的效率直接影响到HashMap的性能。 通过对JDK7中HashMap源码的深入剖析,我们可以了解到HashMap的高效性...

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

    HashMap的resize()方法是HashMap中最核心的方法之一,该方法负责扩容HashMap的容量,以便存储更多的键值对。下面我们将对HashMap的resize()方法进行源码解读,了解其扩容机制和原理。 一、resize()方法概述 resize...

    Java面试题,集合多种面试,跟Java有关的面试

    4. **集合框架**:这是Java面试的重点,包括ArrayList、LinkedList、HashSet、HashMap等数据结构的特性和使用场景。理解List、Set、Map接口及其实现类,以及并发集合如ConcurrentHashMap和CopyOnWriteArrayList的...

    有关链表的面试题

    链表是一种基础且重要的数据结构,它在计算机科学与编程中扮演着重要角色,尤其是在算法设计和数据存储方面。在面试中,链表相关的题目常常被用来考察候选人的逻辑思维和解决问题的能力。以下是对链表及其相关面试...

    阿里云Java实习生面试真题

    4. **HashMap扩容**: 当HashMap中的元素数量达到其容量(initial capacity)的负载因子(load factor)倍时,HashMap会进行扩容。在JDK1.7中,负载因子默认为0.75,扩容时新容量为原容量的两倍。在JDK1.8中,这一...

    Java面试最新知识点问答

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

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

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

Global site tag (gtag.js) - Google Analytics