zoukankan      html  css  js  c++  java
  • JAVA ArrayList以及HashMap的初始容量以及扩容问题 & JAVA集合类对比总结

    一、Java中的ArrayList的初始容量和扩容

    ArrayList是经常会被用到的,一般情况下,使用的时候会像这样进行声明:
    List arrayList = new ArrayList();
    如果像上面这样使用默认的构造方法,初始容量被设置为10。当ArrayList中的元素超过10个以后,会重新分配内存空间,使数组的大小增长到16。
    可以通过调试看到动态增长的数量变化:10->16->25->38->58->88->…
    比如:
    List arrayList = new ArrayList(4);
    将ArrayList的默认容量设置为4。当ArrayList中的元素超过4个以后,会重新分配内存空间,使数组的大小增长到7。
    可以通过调试看到动态增长的数量变化:4->7->11->17->26->…
    那么容量变化的规则是什么呢?请看下面的公式:
    ((旧容量 * 3) / 2) + 1
    一旦容量发生变化,就要带来额外的内存开销,和时间上的开销。
    所以,在已经知道容量大小的情况下,推荐使用下面方式进行声明:
    List arrayList = new ArrayList(CAPACITY_SIZE);

    二、Java中的HashMap的初始容量和扩容

    HashMap初始化时设置已知的大小,如果不超过16个,那么设置成默认大小16:
    集合初始化时, 指定集合初始值大小。
    说明: HashMap使用HashMap(int initialCapacity)初始化,
    正例:initialCapacity = (需要存储的元素个数 / 负载因子) + 1。注意负载因子(即loader factor)默认为0.75, 如果暂时无法确定初始值大小,请设置为16(即默认值)。
    反例:HashMap需要放置1024个元素,由于没有设置容量初始大小,随着元素不断增加,容量7次被迫扩大,resize需要重建hash表,严重影响性能。

    注:无论是ArrayList和HashMap设置初始容量要结合使用环境而定,不然会占据无用的内存空间。

    转载自:https://blog.csdn.net/pdsuxueyuan/article/details/103167501

    PS:JAVA集合类对比总结

    往事如烟,余生有我.
  • 相关阅读:
    UML 类之间的关系
    [noi.ac省选模拟赛]第11场题解集合
    [CF1270F]Awesome Substrings
    [noi.ac省选模拟赛20200606]赌怪
    FFT,NTT入门
    [AHOI2017/HNOI2017]单旋
    [HNOI2016]最小公倍数
    [HNOI2016]树
    [HNOI2016]大数
    服务外包概论课程资料
  • 原文地址:https://www.cnblogs.com/assistants/p/14144706.html
Copyright © 2011-2022 走看看