vectores otro matriz ejemplos duplicar copiar copia como clonar arreglos array java android arrays grid

otro - duplicar array java



Almacenar una grilla de objetos con coordenadas xey para describir su ubicación. ¿Es una matriz una solución aceptable? (3)

Estoy desarrollando un juego en Android que involucra una grilla de objetos. En este momento estoy usando una matriz para almacenar los objetos, como esta:

public class ObjectBuffer { private final Object[] buffer; private final int playfieldWidth; ObjectBuffer(int playfieldWidth, int playfieldHeight) { super(); this.buffer = new Object[playfieldWidth + (playfieldHeight * playfieldWidth)]; this.playfieldWidth = playfieldWidth; } public static int getX(int id) { return id % playfieldWidth(); } public static int getY(int id) { return id / playfieldWidth(); } public Object get(int id) { return this.buffer[id]; } public Object get(int x, int y) { return this.buffer[x + (y * this.playfieldWidth)]; } }

Pero, mi pregunta es, ¿es esta la mejor manera de lograr esto? Elegí una matriz (a diferencia de una lista, ArrayList u otro contenedor) porque una vez que se configuran el ancho y la altura del campo de juego, no cambian. Los objetos están ahí para estado, y una vez que se crean instancias y se agregan a la matriz, se pueden actualizar, pero no se reorganizan.

Mi pregunta es similar a Almacenar objetos para ubicar por coordenadas x, y , pero lo suficientemente diferente que quería hacer mi pregunta por separado. Mis requisitos son diferentes a los de él, y no creo que se justifique un índice espacial en esta situación. Por favor corrígeme si estoy equivocado.

También debo mencionar que las dimensiones de la matriz generalmente serán 10x10 (100 elementos), pero es posible que necesiten un modesto aumento; pero no necesitará manejar más de una cuadrícula de 15x15 (225 elementos). Estas dimensiones siempre se conocerán al generar la grilla. Después de que se haya generado la cuadrícula, las dimensiones no cambiarán.


Las colecciones no solo sirven para soportar estructuras de datos de un tamaño dinámico, sino también para definir el comportamiento de la estructura de datos. No hay nada intrínsecamente incorrecto con el uso de una matriz (en algún punto de la pila de llamadas será de todos modos), pero la definición de una colección le permite la flexibilidad de llamar a los métodos para obtener lo que necesita en lugar de hacer referencia a las coordenadas de la matriz. De esta forma, si necesita cambiar el comportamiento del sistema de coordenadas (por ejemplo, quiere decir que quiere enmascarar el contenido de una referencia de cuadrícula de otro reproductor), no necesariamente necesitará tocar el código que recorre su matriz.


Una mejor opción sería hacer un punto de clase

class Point { int x; int y; //getter and setter methods for x and y public void setCoordinates(int x, int y) { this.x=x; this.y=y; } }

luego crea una matriz de objetos Point

Point[] mypoints

cuando quieras establecer coordenadas para mypoint [i]

mypoint[i].setCoordinates(30,40)


Una matriz multidimensional sería una mejor solución:

Object[][] playfield = new Object[w][h];

Esto le da un código más legible, ya que puede referirse a un elemento como playfield[x][y] lugar de playfield[x + y * WIDTH] de playfield[x + y * WIDTH] . Otra opción, si desea usar colecciones, serían las clases de Table en Google Guava.