¿Cómo funcionan los elementos en un ArrayList?
Frecuentes
Visto 140 veces
4
Si agrego un objeto a un ArrayList en Java, le agrego una referencia, ¿verdad? Así que asume esta situación. Creo un objeto llamado obj y lo establezco en un valor. Luego hago un bucle una cierta cantidad de veces y cada vez modifico un poco obj (como cambiar su posición) y luego lo agrego a ArrayList. Después de cada secuencia del bucle, restablezco obj al valor predeterminado para que la siguiente secuencia tenga un obj nuevo para modificar. Suponiendo que haya estado pasando referencias de obj todo el tiempo, ¿todo en ArrayList también se establecerá en el valor predeterminado? De las pruebas, veo que los valores no cambian y son todos diferentes, lo que me parece extraño. ¿Alguien podría elaborar?
Block b = block.clone();
for(int x = 0; x < amountX; x++){
Vector3f offset = new Vector3f(0, 0, 0);
offset.x = x * block.getScale().x;
for(int y = 0; y < amountY; y++){
offset.y = y * block.getScale().y;
for(int z = 0; z < amountZ; z++){
offset.z = z * block.getScale().z;
b.move(offset);
addBlocks(b);
b = block.clone();
}
}
}
for(Block a : blocks)
System.out.println(a.getPosition());
addBlocks agrega un bloque a ArrayList. El último ciclo imprime todas las posiciones diferentes. Block.clone() simplemente crea un nuevo bloque con los mismos parámetros.
1 Respuestas
3
Object o = new Object();
En este punto ya no está modificando el objeto, está modificando la referencia. es decir, creando un nuevo objeto y apuntando esta variable hacia él.
do
{
Object o = new Object(); // set o to point to a new Object
arrayList.add(o); //add a reference to the new object to the ArrayList
}while(true)
la segunda vez a través de este bucle, arrayList[1] hace referencia al primer objeto creado en la memoria en pos1. Pero luego cambia a dónde apunta el objeto o en la memoria creando uno nuevo (en pos2) y apuntándolo con o. Ahora tiene dos objetos en la memoria, uno al que se hace referencia en [1] en arrayList y otro al que se hace referencia en el objeto o.
Si modifica el objeto y no la referencia, obtendrá el comportamiento del que habla, por ejemplo
do
{
g.setName("Steven");
arrayList.add(o);
}while(true)
respondido 22 nov., 13:15
Entonces, si creo una nueva instancia del objeto, ¿también crea un nuevo objeto en el montón? ¿Significa que ahora el objeto no apunta a lo que solía? - Chipre
Sí. Está diciendo que el objeto o se vuelve igual a un nuevo objeto en el montón. - ross dibujó
Excelente explicación de un concepto muy importante. - Andrés
Bien, lo tengo. ¡Gracias! - Chipre
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas java list arraylist or haz tu propia pregunta.
Mucho texto con poco código. ¿Puedes compartir el código con el que trabajaste? - Jeroen Vannevel
Odiamos leer texto :) Muéstrenos el código para restablecer el valor predeterminado del objeto. - MariuszS