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