清空Java中的数组/处理

java arrays processing

250397 观看

8回复

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

作者: ina 的来源 发布者: 2019 年 11 月 12 日

回应 (8)


67

Arrays.fill(myArray, null);

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

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

作者: Mark Peters 发布者: 17.11.2010 08:07

26

您可以简单地分配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的默认值。

作者: jjnguy 发布者: 17.11.2010 08:06

9

array = new String[array.length];
作者: Adam 发布者: 17.11.2010 08:08

3

与此相比,此方法比Arrays.fill的清除速度更快(来自快速序列化库)。我只是使用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);
}
作者: R.Moeller 发布者: 07.10.2013 12:08

3

如果Array xco不是final,则可以进行简单的重新分配:

xco = new Float[xco .length];

假设您需要Array xco保持相同大小。如果没有必要,请创建一个空数组:

xco= new Float[0];
作者: Suraj Mahli 发布者: 26.10.2018 01:09

2

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

作者: AlexR 发布者: 17.11.2010 08:19

2

以双精度数组为例,如果初始输入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);
  }
}
作者: Shiqing Fan 发布者: 31.10.2016 06:29

0

我能够通过以下两行做到这一点,我有一个名为selected_items的数组,用于获取dataTable上的所有选定项

selected_items = null;
selected_items = [];
作者: Cesar Duran 发布者: 04.02.2018 04:35
32x32