我ArrayList<Integer>
在我的研究项目中使用。我需要在此列表中保留未知数量的整数。有时我需要更新列表:删除现有记录或添加新记录。作为Integer
一个对象,它比 only 占用更多的内存int
。是否有任何替代方法来维护将消耗更少内存的列表Integer
?
4 回答
尝试一种针对内存使用优化的整数列表实现,例如Colt 库中的一个:
http://acs.lbl.gov/software/colt/api/cern/colt/list/IntArrayList.html
Java Integer 对象通常需要比 int 原语更多的开销,因此您需要一个空间优化的实现。
从柯尔特:
例如,在 CERN 进行的科学和技术计算的特点是对问题规模的要求很高,并且需要在相当小的内存占用下获得高性能。[...]
您还应该考虑另一种存储系统ArrayList
。至于链接机制,每个元素都有一个开销(有时)消耗更多的内存作为值本身。也许您不需要订购它们。如果适用或实现自己的数据结构,您是否考虑过Map
一个简单的 oder ?Set
这取决于您使用的语言,但我认为它是 Java。在 Java 中,您可能知道,不能在 ArrayList 中使用整数,因为它们是原始数据类型。要使用整数,您必须使用固定大小的常规数组。这意味着每次添加内容时都需要创建一个更大的新数组,假设元素数量大于数组。你用内存来换取复杂性,因为你必须编写更多的代码,并且来回移动整数。
减少的内存使用不太可能值得付出努力,并且在实施这种解决方案时存在额外的错误风险。
您可以使用带有 int-s 的数组并使用与 ArrayList 相同的逻辑编写自己的方法。但是 IMO 这是一个坏主意 - 现代机器有足够的内存来使用 Integer 对象,相信我...... :)