for - Vaciar una matriz en Java/procesamiento
make 2d array processing (7)
Además de recorrer cada elemento de una matriz y configurar cada uno como nulo, ¿existe una función nativa en Java / procesamiento para simplemente vaciar una matriz (o destruirla, para poder redeclararla como una nueva matriz)?
Hay
Arrays.fill(myArray, null);
No es que haga nada diferente de lo que harías por tu cuenta (simplemente pasa por cada elemento y lo establece en nulo). No es nativo, ya que es el código puro de Java el que realiza esto, pero es una función de biblioteca, si tal vez eso es lo que quería decir.
Esto, por supuesto, no le permite cambiar el tamaño de la matriz (a cero), si eso es lo que quiere decir con "vacío". Los tamaños de matriz son fijos, por lo que si desea que la matriz "nueva" tenga diferentes dimensiones, lo mejor es que reasigne la referencia a una nueva matriz, como lo demuestran las otras respuestas. Mejor aún, use un tipo de List
como ArrayList
que puede tener un tamaño variable.
Pude hacer eso con las siguientes 2 líneas, tenía una matriz llamada selected_items utilizada para obtener todos los elementos seleccionados en una tabla de datos.
selected_items = null; selected_items = [];
Simplemente puede asignar null
a la referencia. (Esto funcionará para cualquier tipo de matriz, no solo ints
)
int[] arr = new int[]{1, 2, 3, 4};
arr = null;
Esto ''limpiará'' la matriz. También puede asignar una nueva matriz a esa referencia si lo desea:
int[] arr = new int[]{1, 2, 3, 4};
arr = new int[]{6, 7, 8, 9};
Si le preocupan las pérdidas de memoria, no lo haga. El recolector de basura limpiará las referencias dejadas por la matriz.
Otro ejemplo:
float[] arr = ;// some array that you want to clear
arr = new float[arr.length];
Esto creará un nuevo float[]
inicializado al valor predeterminado para flotante.
Solo quiero agregar algo al comentario de Mark. Si desea reutilizar la matriz sin asignación adicional, simplemente úsela de nuevo y anule los valores existentes con valores nuevos. Funcionará si llena la matriz secuencialmente. En este caso, solo recuerde el último elemento inicializado y use array hasta este índice. No importa que haya algo de basura al final de la matriz.
Tome la matriz doble como ejemplo, si la matriz de values
iniciales de entrada no está vacía , el siguiente fragmento de código es superior a la complejidad tradicional de for-loop
in time:
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);
}
}
Un borrado más rápido que Arrays.fill es con esto (desde Fast Serialization Lib). Solo uso arrayCopy (es nativo) para borrar la matriz:
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);
}
array = new String[array.length];