除了遍历数组中的每个元素并将其设置为 null 之外,Java / processing 中是否有本地函数可以简单地清空一个数组(或销毁它,以便能够将其重新声明为新数组)?
这里有内容
Arrays.fill(myArray, null);
并没有什么不同于您自己执行的操作(它只是循环遍历每个元素并将其设置为null)。它不是原生的,因为它是执行此操作的纯Java代码,但如果可能这是您所指的,它是一个库函数。
当然,这不能让你调整数组大小(到零),如果你所说的“空”是指这个。数组大小是固定的,因此如果您想要“新”的数组具有不同的维度,您最好就像其他答案所示重新分配对新数组的引用。更好的方法是使用像ArrayList
这样的List
类型,它可以具有可变大小。
ArrayList.clear()
所做的:它将大小设置为零,然后迭代整个数组,将每个索引清零。 - Mark Peters无法解析方法fill(boolean [],null)
。 - IgorGanapolskyboolean[]
,你应该调用 fill(boolean[], boolean)
,而不是 fill(Object[], Object)
,因此它不会接受第二个参数为 null
(因为 null
不能赋值给 boolean
)。 - Mark PetersT[]
的重载。 - M.kazem Akhgary你可以简单地将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类型的默认值。null
赋值给数组,那么你将无法再使用它。你需要重新声明一个数组来引用它。请参考我的第二个例子。 - jjnguyarr = new int[]{};
来清空我的数组,而不是将其设为 null
。 - Senura Dissanayakearray = new String[array.length];
以双重数组为例,如果初始输入的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);
}
}
xco
不是 final,那么一个简单的重新赋值就可以解决问题:xco = new Float[xco .length];
xco
的大小不变。如果没有这个要求,那么可以创建一个空数组:xco= new Float[0];
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);
}
ArrayList
在幕后为您完成的工作。自己手动实现虽然可行,但更加繁琐且容易出错。在我看来,最好使用 Collection
类。但如果您必须直接使用数组,则这是一个很好的观察结果。 - Mark Petersselected_items = null;
selected_items = [];
float[] xco = new float[1024];
- inamyArray.clear();
或myArray = new ArrayList();
。如果您希望数组中的每个元素都为null以满足代码中的某些特定需求,则这不是一个空数组;它是一个由null组成的数组。我已经对这个问题进行了反对投票,但如果您解决我的问题,我会改为支持它。 - Jason