• hashmap时间复杂度


    理想情况下HashMap的时间复杂度为O(1),因为对于内存来说,访问任何地址的时间是一样的,即时间极短,相当于可以同时访问到所有地址。

    而在时间复杂度为O(1)时,需要很大的内存空间,所以必须要对内存和时间进行取舍。

    咋取舍呢,hashmap在初始化的时候有俩值,初始大小和负载因子,默认是16和0.75

    大小不用解释,负载因子就是一个小数,扩容的时候用的,在put的时候,hashmap就检查一下自己的大小,是不是大于16x0.75(大小x负载因子),如果是,就扩容,扩容到2^n,为啥是这个呢,我看了很多资料,

    hash值要进行取余运算,而数学证明,hash%(2^n)=hash^(2^n-1),为了效率,就采用了2倍的扩容。ps:^为异或,2^n为2的n次方

    面试题:初始构造器设置大小为25,hashmap实际大小是多少?

    实际是64,首先,找到比25大的2^n,是32,负载因子为0.75,则能装24个,25>24,触发扩容,为64.

    下面是hash运算的源码

    static final int hash(Object key) {
        int h;
        return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);
    }
  • 相关阅读:
    Ubuntu安装php7.0环境
    PHP-FPM参数详情
    phpize是干嘛的
    Ubuntu忘记密码
    Ubuntu下面删除和卸载软件
    Js验证正则表达式
    JS发送验证码;并设置cookie
    Shell脚本之sed的使用
    Bash基本功能:输入输出重定向
    shell常用快捷键
  • 原文地址:https://www.cnblogs.com/BBchao/p/7878699.html
Copyright © 2020-2023  润新知