Java ArrayList的内存使用情况<;整数>;

Java ArrayList的内存使用情况<;整数>;,java,memory-management,arraylist,integer,Java,Memory Management,Arraylist,Integer,我正在我的研究项目中使用ArrayList。我需要在这个列表中保留未知数量的整数。有时我需要更新列表:删除现有记录或添加新记录。由于Integer是一个对象,因此它占用的内存远远多于int。是否有其他方法来维护列表,使其占用的内存少于Integer?您可以使用带有int-s的数组,并使用与ArrayList相同的逻辑编写自己的方法。但在我看来,这是个坏主意——现代机器有足够的内存来使用整数对象,相信我…:) 这取决于您使用的语言,但我假设它是Java。在Java中,您可能知道,不能在ArrayL

我正在我的研究项目中使用
ArrayList
。我需要在这个列表中保留未知数量的整数。有时我需要更新列表:删除现有记录或添加新记录。由于
Integer
是一个对象,因此它占用的内存远远多于
int
。是否有其他方法来维护列表,使其占用的内存少于
Integer

您可以使用带有int-s的数组,并使用与ArrayList相同的逻辑编写自己的方法。但在我看来,这是个坏主意——现代机器有足够的内存来使用整数对象,相信我…:)

这取决于您使用的语言,但我假设它是Java。在Java中,您可能知道,不能在ArrayList中使用int,因为它们是一种原始数据类型。要使用int,必须使用固定大小的常规数组。这意味着您需要在每次添加内容时创建一个更大的新数组,假设这样会使元素的数量大于该数组。你用内存换取复杂性,因为你必须写更多的代码,还要来回移动整数


减少的内存使用不太值得为实现这样一个解决方案而付出的努力和额外的错误风险。

尝试一个针对内存使用进行优化的整数列表实现,例如:

,因此您需要一个空间优化的实现

发件人:

例如,欧洲核子研究所(CERN)进行的科学和技术计算,其特点是问题规模要求很高,并且需要在相当小的内存占用下实现高性能。[……]


您还应该考虑使用alternativ存储系统
ArrayList
。至于链接机制,每个元素的开销(有时)都比值本身消耗更多内存。也许你不需要订购。您是否考虑过使用
映射
或简单的
集合
(如果适用)或实现您自己的数据结构?

是的,数组是保持原始打字机的唯一方法,但这是一个愚蠢的说法。我电脑的内存一秒钟就被填满了。当您存储数百万个整数时,500%的开销(或实际上的开销)是不可接受的。根据具体实现,一个
整数可能只需要16个字节,而int中只有4个字节。这真的有什么大不了的吗?(1)数组不是“不变的”,它们是“固定大小”的。(“不可变”意味着您甚至不能更改它们的元素。)(2)您不需要在每次添加内容时创建更大的数组;您只需要跟踪列表的大小,它可以小于数组的大小。(实际上,这就是JDK
ArrayList
类的工作方式,只是它使用了
对象[]
而不是
int[]