50

除了遍历数组中的每个元素并将每个元素设置为 null 之外,Java/处理中是否有一个本机函数可以简单地清空数组(或销毁它,以便能够将其重新声明为新数组)?

4

8 回答 8

81

Arrays.fill(myArray, null);

并不是说它做的事情与你自己做的不同(它只是循环遍历每个元素并将其设置为 null)。它不是本机的,因为它是执行此操作的纯 Java 代码,但它一个库函数,如果这可能是您的意思的话。

如果这就是“空”的意思,这当然不允许您调整数组的大小(为零)。数组大小是固定的,因此如果您希望“新”数组具有不同的维度,则最好将引用重新分配给新数组,如其他答案所示。更好的是,使用可以具有可变大小的List类型。ArrayList

于 2010-11-17T20:07:25.863 回答
36

您可以简单地分配null给参考。(这适用于任何类型的数组,而不仅仅是ints

int[] arr = new int[]{1, 2, 3, 4};
arr = null;

这将“清除”数组。如果您愿意,还可以为该引用分配一个新数组:

int[] arr = new int[]{1, 2, 3, 4};
arr = new int[]{6, 7, 8, 9};

如果您担心内存泄漏,请不要担心。垃圾收集器将清理数组留下的任何引用。

另一个例子:

float[] arr = ;// some array that you want to clear
arr = new float[arr.length];

这将创建一个新的float[]初始化为 float 的默认值。

于 2010-11-17T20:06:36.427 回答
8
array = new String[array.length];
于 2010-11-17T20:08:09.403 回答
4

如果 Arrayxco不是最终的,那么一个简单的重新分配就可以了:

IE

xco = new Float[xco .length];

这假设您需要 Arrayxco保持相同的大小。如果不需要,则创建一个空数组:

xco= new Float[0];
于 2018-10-26T13:09:23.483 回答
4

以 double 数组为例,如果初始输入values数组不为空for-loop,则以下代码片段在时间复杂度上优于传统直接:

public static void resetValues(double[] values) {
  int len = values.length;
  if (len > 0) {
    values[0] = 0.0;
  }
  for (int i = 1; i < len; i += i) {
    System.arraycopy(values, 0, values, i, ((len - i) < i) ? (len - i) : i);
  }
}
于 2016-10-31T06:29:01.273 回答
3

与 Arrays.fill 相比,清除速度更快(来自 Fast Serialization Lib)。我只是使用 arrayCopy (是本机的)来清除数组:

static Object[] EmptyObjArray = new Object[10000];

public static void clear(Object[] arr) {
    final int arrlen = arr.length;
    clear(arr, arrlen);
}

public static void clear(Object[] arr, int arrlen) {
    int count = 0;
    final int length = EmptyObjArray.length;
    while( arrlen - count > length) {
        System.arraycopy(EmptyObjArray,0,arr,count, length);
        count += length;
    }
    System.arraycopy(EmptyObjArray,0,arr,count, arrlen -count);
}
于 2013-10-07T12:08:09.663 回答
2

我只想在 Mark 的评论中添加一些内容。如果您想在不进行额外分配的情况下重用数组,只需再次使用它并用新值覆盖现有值。如果您按顺序填充数组,它将起作用。在这种情况下,只需记住最后一个初始化的元素并使用数组直到这个索引。数组末尾有一些垃圾也没关系。

于 2010-11-17T20:19:55.903 回答
-1

我可以用以下 2 行来做到这一点,我有一个名为 selected_items 的数组,用于获取 dataTable 上的所有选定项目

selected_items = null;
selected_items = [];
于 2018-02-04T04:35:48.673 回答