ina*_*ina 39 java arrays processing
除了遍历数组中的每个元素并将每个元素设置为null之外,Java /处理中是否有一个本机函数来简单地清空一个数组(或者将其销毁,以便能够将其重新声明为一个新数组)?
Mar*_*ers 67
有
Arrays.fill(myArray, null);
Run Code Online (Sandbox Code Playgroud)
并不是说它与你自己做的有什么不同(它只是循环遍历每个元素并将其设置为null).它不是原生的,因为它是执行此操作的纯Java代码,但它是一个库函数,如果这可能是你的意思.
这当然不允许你调整数组的大小(为零),如果你的意思是"空".数组大小是固定的,因此如果您希望"新"数组具有不同的维度,则最好只是将引用重新分配给新数组,如其他答案所示.更好的是,使用List
类似于ArrayList
可变大小的类型.
jjn*_*guy 26
您可以简单地分配null
给参考.(这适用于任何类型的数组,而不仅仅是ints
)
int[] arr = new int[]{1, 2, 3, 4};
arr = null;
Run Code Online (Sandbox Code Playgroud)
这将"清除"阵列.如果您愿意,还可以为该引用分配新数组:
int[] arr = new int[]{1, 2, 3, 4};
arr = new int[]{6, 7, 8, 9};
Run Code Online (Sandbox Code Playgroud)
如果您担心内存泄漏,请不要.垃圾收集器将清除阵列留下的任何引用.
另一个例子:
float[] arr = ;// some array that you want to clear
arr = new float[arr.length];
Run Code Online (Sandbox Code Playgroud)
这将创建一个新的float[]
初始化为float的默认值.
以 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);
}
}
Run Code Online (Sandbox Code Playgroud)