zoukankan      html  css  js  c++  java
  • 为什么hashmap的容量永远要是2的次方

    源码hashmap.java文件中有个函数叫tableSizeFor(),他的作用是,通过-1>>>n-1返回一个大于n的最小二次幂,n为map之前的容量,而函数返回值就是扩容的二次幂,但是这个不能完美的解释为什么是2次方,然后我从get()找到了getNode()函数,他的参数是被处理过得哈希值,通过hash()返回的哈希值,然后在getNode中有一条语句是(n-1)&hash,确定每个元素的底层数组位置,如果n不是2的次方的话,那么n-1中必然不全为1,则与不同的hash相与得到相同的值的几率很大,因为0不论与1和0相与都是0。

    所以我觉得之所以是2的次方,一方面是hashmap从一开始就约定好的逻辑结构,另一方面是为了处理hashmap的散列,虽然引入了红黑树,但是还是要尽可能的避免冲突发生。

    个人小站:http://jun10ng.work/ 拥抱变化,时刻斗争,走出舒适圈。
  • 相关阅读:
    C#学习-多态
    C#学习-子类的初始化顺序
    C#学习-面向对象
    Python数据类型知识点全解
    python 复制图片到剪贴板
    pyperclip
    pyautogui
    多线程代码案例
    常用正则表达式最强整理(速查手册)
    python os
  • 原文地址:https://www.cnblogs.com/Jun10ng/p/12361286.html
Copyright © 2011-2022 走看看