我需要存储大量信息,例如 java 列表中的“名称”。项目的数量可以改变(或者简而言之,我无法预定义大小)。我认为,从内存分配的角度来看,LinkedList 是比 ArrayList 更好的选择,对于 ArrayList 来说,一旦达到最大大小,内存分配会自动加倍,因此总是有可能分配比 ArrayList 更多的内存。需要什么。
我从这里的其他帖子了解到,存储在 LinkedList 中的单个元素比 ArrayList 占用更多空间,因为 LinkedList 还需要存储节点信息,但我仍然猜测我定义的场景 LinkedList 可能是更好的选择。另外,我不想讨论性能方面(获取、删除等),因为已经对此进行了很多讨论。
LinkedList
可能会分配更少的条目,但这些条目的成本比它们应有的要高得多ArrayList
——即使是最坏的情况也足够了ArrayList
就内存而言更便宜。
(仅供参考,我认为你弄错了;ArrayList
满时会增长 1.5 倍,而不是 2 倍。)
参见例如https://github.com/DimitrisAndreou/memory-measurer/blob/master/ElementCostInDataStructures.txt https://github.com/DimitrisAndreou/memory-measurer/blob/master/ElementCostInDataStructures.txt : LinkedList
每个元素消耗 24 个字节,而ArrayList
在最好的情况下每个元素消耗 4 个字节,在最坏的情况下每个元素消耗 6 个字节。 (结果可能会有所不同,具体取决于 32 位与 64 位 JVM 以及压缩对象指针选项,但在这些比较中LinkedList
每个元素至少花费 36 个字节,并且ArrayList
最好是 8,最坏是 12。)
UPDATE:
我从这里的其他帖子了解到,存储在 LinkedList 中的单个元素比 ArrayList 占用更多空间,因为 LinkedList 还需要存储节点信息,但我仍然猜测我定义的场景 LinkedList 可能是更好的选择。另外,我不想讨论性能方面(获取、删除等),因为已经对此进行了很多讨论。
需要明确的是,即使在最坏的情况下, ArrayList
比 a 小 4 倍LinkedList
具有相同的元素。唯一可能的方法是制作LinkedList
win 是通过调用故意修复比较ensureCapacity
故意夸大价值,或者从ArrayList
添加后。
简而言之,基本上是不可能的LinkedList
赢得内存比较,如果你关心空间,那么调用trimToSize()
on the ArrayList
会立即使ArrayList
再次以巨大优势获胜。严重地。ArrayList
wins.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)