美文网首页
某些情况宁愿多用数组也不用集合

某些情况宁愿多用数组也不用集合

作者: 南土酱 | 来源:发表于2019-05-03 14:50 被阅读0次

    今天看到一篇文章,都是大佬积累下来的经验。如标题所示
    我们知道集合里边不能存放基本数据类型,只能存储引用数据类型。
    例如整型吧, int与包装类Integer。假如你想串联起来变成一串数据。
    要么 new int[]索引存值,要么ArrayList调用接口add(new Integer(X))方法添加数据
    从java内存来说,从64位的操作系统来说(32位有些东西不一样):
    一个java对象在Heap(堆)的表示,分三部分:
    1.Object Header(占用4byte)
    2.Class Pointer(占用4byte)
    3.Fields

    以一个 Integer 来说 , 上边固定的两部分都是 4byte, 还有一个 private final int value;整型占用4byte。加上 在java中,对象占用的heap大小是8位对齐的。上边 3 * 4 = 12 不对齐需补4byte。结果是16byte。

    Arraylist源码中的两个字段: image.png

    那么对于 Arraylist, 假如我们存储10个数据
    运算公式:
    10 * (一个Integer=(16byte)) + (list本身也是对象=12byte(不算 elementData)) + (elementData也是对象=12byte) = 10*16+12+12 = 184byte
    而如果是new int[]:
    (一个int = 4byte) *10 + (new int = 12byte) = 56byte
    184 : 56 ,超过了 3 : 1
    so能用数组就用数组.
    如果你非要, 推荐一个比较节约内存的集合工具,fastutil , 包含了JDK集合中绝大部分的实现。

    相关文章

      网友评论

          本文标题:某些情况宁愿多用数组也不用集合

          本文链接:https://www.haomeiwen.com/subject/uooanqtx.html