Android开源框架Universal-Image-Loader源码——关于LinkedHashMap的加载因子和初始容量分配

	this.maxSize = maxSize;

	this.map = new LinkedHashMap<String, Bitmap>(0, 0.75f, true);

}



       上面这段代码是github上面一个比较有名的开源项目中的一段,大概就是一个用LinkedHashMap来实现lru,我的问题LinkedHashMap构造函数的前2个参数,初始容量竟然是0?那加载因子0.75有何意义?据我所知,扩展容量时,是用初始容量\*加载因子,这样的话,这个扩展的容量不是始终都是0了吗,初始也为0,扩展也为0,那这个hashmap还有何意义?不知道哪里理解错了



第一个网友的回答如下:



       你再看看HashMap的源代码,看看是怎么扩容的。  

       上面这段代码没有什么特别的地方,只是初始化了一个长度为0的HashMap,顺便设置了LinkedHashMap的访问顺序(第三个参数),  这种情况一般是创建时不确定Map中是否会有值及几个值,比较保守的写法,不想浪费空间。  

        默认的构造方法是长度为16, 如果你不确定map中是否能放够16个键值,那么16的长度就浪费了。这样写也有不利的地方,多了几次运行时的扩容操作,作者可能认为空间更重要吧。  



第二个网友的回答如下:  



       看看源码就知道了



       其实第一个参数是你要设置的初始大小;而程序内部实际的初始大小是1;  

       如果你设置的初始大小(initialCapacity)小于1, 那么map大小就是默认的1;  

       否则会不断左移(乘2)直到capacity大于你设置的initialCapacity;  



public LinkedHashMap(int initialCapacity,

		 float loadFactor,

                     boolean accessOrder) {

    super(initialCapacity, loadFactor);//这里调用父类HashMap的构造方法;

    this.accessOrder = accessOrder;

}

public HashMap(int initialCapacity, float loadFactor) {

    if (initialCapacity < 0)

        throw new IllegalArgumentException("Illegal initial capacity: " +

                                           initialCapacity);

    if (initialCapacity > MAXIMUM_CAPACITY)

        initialCapacity = MAXIMUM_CAPACITY;

    if (loadFactor <= 0 || Float.isNaN(loadFactor))

        throw new IllegalArgumentException("Illegal load factor: " +

                                           loadFactor);



    // Find a power of 2 >= initialCapacity

    int capacity = 1;  // 默认是1

最后附上:我们之前因为秋招收集的二十套一二线互联网公司Android面试真题 (含BAT、小米、华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总)

面试成功其实是必然的,因为我做足了充分的准备工作,包括刷题啊,看一些Android核心的知识点,看一些面试的博客吸取大家面试的一些经验,下面这份PDF是我翻阅了差不多1个月左右一些Android大博主的博客从他们那里取其精华去其糟泊所整理出来的一些Android的核心知识点, 全部都是精华中的精华,我能面试到现在资深开发人员跟我整理的这本Android核心知识点有密不可分的关系,在这里本着共赢的心态分享给各位朋友。

这份PDF囊括了JVM,Java集合,Java多线程并发,Java基础,生命周期,微服务, 进程,Parcelable 接口,IPC,屏幕适配,线程异步,ART,架构,Jetpack,NDK开发,计算机网络基础,类加载器,Android 开源库源码分析,设计模式汇总,Gradle 知识点汇总…

由于篇幅有限,就不做过多的介绍,大家请自行脑补

加入社区》https://bbs.csdn.net/forums/4304bb5a486d4c3ab8389e65ecb71ac0
由于篇幅有限,就不做过多的介绍,大家请自行脑补

加入社区》https://bbs.csdn.net/forums/4304bb5a486d4c3ab8389e65ecb71ac0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值