zoukankan      html  css  js  c++  java
  • java8 hashmap扩容机制

    默认情况下HashMap的容量是16,如果用户通过构造函数指定了一个数字作为容量,那么Hash会选择大于该数字的第一个2的幂作为容量。(3->4、7->8、9->16)

    如果map在put的时候发现超过阙值的时候就会产生扩容:

      阙值 = 负载因子 * 容量

    threshold = loadFactor * capacity

    所以我们知道map里存放的个数时候,new的构造函数的设置值应该利用公式 = (需要存储的个数 / 负载因子)+ 1

    比如map里要存放16个元素

    (16 / 0.75) + 1 = 22

    Map<String, String> map = new HashMap<String, String>(22);
    // 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;
    map容量变成24
    阙值 = 24 * 0.75 = 18
    此时我们存放16个元素就不会触发扩容
    

     

  • 相关阅读:
    前端最全资源汇集
    面试题
    前端知识
    我的工作心得
    一个类似于jq的小型库
    js 模拟css3 动画3
    js 模拟css3 动画2
    js 模拟css3 动画1
    js 模拟css3 动画
    学习node.js 第4篇 建立一个最小的web聊天系统
  • 原文地址:https://www.cnblogs.com/hzzjj/p/13663335.html
Copyright © 2011-2022 走看看