首页 > 解决方案 > 将新数组分配给现有数组以在 Java 中“清除”数组是不好的做法吗?

问题描述

所以我目前正在开发一个程序,该程序需要能够处理存储在数组中的大量数据,并且它需要一种方法来清除数组中的所有内容。对于下面的示例,在记忆方面这样做会是一件坏事吗?我知道垃圾收集器最终会为您清理它,但有没有理由为什么另一种方法(例如 for 循环并将每个值设置为 null)可能比这更好?

Object[] objArray = new Object[n];
/*Do some stuff with objArray*/
objArray = new Object[n]

否则,这样做将允许此操作在 O(1) 时间内运行,而 for 循环则需要 O(n)。

标签: javaarraysbig-o

解决方案


这是不好的做法。

首先,将新数组分配给变量实际上并没有“清除”任何内容(下面将详细介绍)。

这是最佳实践:

objArray = null;

这使得原始数组无法访问,因此它将(最终)被垃圾收集。

它还避免了不必要的内存分配,创建用于替换旧数组的空数组。

但是,这两个选项都不会“清除”原始数组,这可能会带来尽管很小的安全风险。在垃圾收集之前,如果内存内容被转储等,数组的内容可能是可预测的。

真正清除数组:

Arrays.fill(objArray, null);

推荐阅读