zoukankan      html  css  js  c++  java
  • 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);
    }
  • 相关阅读:
    Quartz Cron表达式详解
    面向对象设计的SOLID原则
    JDK动态代理Demo代码,简单易懂
    <x:forEach/>遍历RSS新闻
    <x:parse/>获取RSS新闻
    fn:length()方法
    使用一个map映射出两个对象,再把两者关系对应起来
    用户注册_发邮件,激活
    ajax 的json联动
    封装ajax小工具:
  • 原文地址:https://www.cnblogs.com/BBchao/p/7878699.html
Copyright © 2011-2022 走看看