2011-03-18 23 views
5

¿Hay algún caso de uso real para parallel arrays en Java? Parece demasiado engorroso mantener matrices de N que están interrelacionadas.¿Por qué usar matrices paralelas en Java?

Ejemplo:

int ages[] = {0,   17,  2,   52,   25}; 
String names[] = {"None", "Mike", "Billy", "Tom",  "Stan"}; 
int parent[] = {0,   3,   1,   0,   3}; 

puedo simplemente crear una persona de clase y objetos de almacén en una sola matriz. Será un poco más caro, pero mucho más fácil de usar, ¿verdad?

Respuesta

10

Los arreglos en paralelo son un remanente de idiomas como Basic (el original) que no tenía estructuras de datos distintas de las matrices. Debería definir objetos como sugiere, en su lugar.

1

Cree una representación de Clase/Objeto solo si lo que intenta representar se puede explicar mejor como un objeto.

Los mapas hash son otra solución. Por ejemplo, en lugar de matrices diferentes para edades y nombres, si los nombres son únicos, puede usar el nombre como claves y la edad como valor.

+2

Los mapas son casi tan malos como los arrays paralelos. –

+0

@stephan: bueno, estoy de acuerdo, pero a veces, prefiero usar mapas cuando las cosas son simples :) – Sujoy

+0

Voy a revisar eso. En algunos aspectos, los mapas son peores; p.ej. son inevitablemente más lentos y tienen más memoria que ambas matrices paralelas y el enfoque preferido (clases personalizadas). Además, el enfoque de Map se vuelve engorroso si tiene más de dos atributos para asociar ... como en este caso. –

1

Las clases son más agradables, pero si el caso de uso es estrecho, p. un cuerpo de método, es un desperdicio crear uno. Si tiene una clase Pair, puede especializarla para este fin sin crear una nueva clase.

11

La única ventaja real de las matrices en paralelo en Java es como una medida (IMO extrema) para reducir la asignación de objetos y/o el uso del montón. Para una colección de objetos lo suficientemente grande, 3 arreglos ocuparán menos espacio Y usarán menos objetos que una única serie de instancias de alguna clase personalizada.

Este enfoque es normalmente una mala idea, ya que hace que su código sea mucho más frágil. Crear y usar una clase personalizada es el mejor enfoque en la mayoría de las situaciones.

+3

Sí, esto es algo a tener en cuenta en el desarrollo de Android. No todos los dispositivos Android son iguales, y los teléfonos móviles en general tienen recursos limitados. Para citar los Consejos de rendimiento de la referencia de los desarrolladores de Android, '" Si necesita implementar un contenedor que almacene tuplas de objetos (Foo, Bar), intente recordar que dos matrices Foo [] y Bar [] paralelas son generalmente mucho mejores. que una única matriz de objetos personalizados (Foo, Bar). "' http://developer.android.com/training/articles/perf-tips.html – loeschg

Cuestiones relacionadas