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集合类对比总结

    往事如烟,余生有我.
  • 相关阅读:
    python的各版本的不同
    keras中的early stopping
    NER的数据处理
    ner处理数据的方式
    python的数据处理一
    linux下的终端利器----tmux
    BiseNet学习笔记
    《Harnessing Synthesized Abstraction Images to Improve Facial Attribute Recognition》论文阅读笔记
    转:玩玩三维重建
    《Cascaded Pyramid Network for Multi-Person Pose Estimation》论文阅读及复现笔记
  • 原文地址:https://www.cnblogs.com/assistants/p/14144706.html
Copyright © 2011-2022 走看看