【问题标题】:Java ArrayList removing elements recover wasted space? [duplicate]Java ArrayList 删除元素恢复浪费的空间? [复制]
【发布时间】:2019-04-15 09:27:28
【问题描述】:

如果您有一个 Array List 已扩展(数组已增长)以包含许多元素,然后这些元素被删除,实际数组大小是否会更改以节省内存?

更详细地说,当从一个大数组列表中删除一个元素时,为数组的空部分保留的内存是否恢复了?这似乎是合乎逻辑的,因为我们扩展了数组,我们可能需要使用这个空间,所以它不会被触及。

但是,如果我们有一个非常大的数组列表并且我们只使用前 10 个左右的元素,编译器(或在运行时)是否会意识到所有额外的空间都被浪费了并恢复它? (实际数组大小会减小吗?(将元素复制到更小的数组中?))

【问题讨论】:

  • @AxelH 没有找到那个,但我更喜欢 Eran 在下面的回答 ;)
  • 你的问题也更好!
  • Java 世界中有一些集合可以修剪它们的大小,但通常这不是必需的,因为您只会“修剪”并接下来进行分配......这就是为什么要使用 trimToSize小心。

标签: java arraylist


【解决方案1】:

您可以调用 trimToSize() 以将 ArrayList 的后备数组替换为与列表大小匹配的较小数组。

void java.util.ArrayList.trimToSize()

将此 ArrayList 实例的容量调整为列表的当前大小。应用程序可以使用此操作来最小化 ArrayList 实例的存储。

【讨论】:

  • 所以有一种方法,但它永远不会自动完成,很高兴知道!
  • 我相信可以肯定的是,这太复杂了,无法知道何时是自动执行此操作而不会出现性能问题的最佳时间。另一方面,增长是程序运行所必需的,因此它是根据需要完成的。
  • @AxelH 是的,让你的数组大小一遍又一遍地减少和增加真的会影响效率
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-29
相关资源
最近更新 更多