[ Foro de Java ]

Listado de vectores o matriz.

04-Oct-2015 19:23
Angel Bravo
6 Respuestas

Programas de cálculo como excel, Stathgraphics o SPSS no necesitan que previamente se establezca una dimensión o tamaño de la matriz de datos...simplemente hay celdas y usas las que quieras, ¿Eso puede hacerse en Java?¿Se podría usar para ello un listado de vectores en lugar de usar simplemente una matriz?¿Qué ventajas o inconvenientes tendría hacerlo así?.


09-Oct-2015 12:14
Nacho Cabanes (+32)

Para imitar eso, tendrás que crear una estructura dinámica, capaz de crecer a medida que lo necesites (o bien sobredimensionar, que tiene menos sentido).

Hay varias formas de hacerlo. Por ejemplo, si la velocidad de acceso es menos importante que el espacio empleado, puedes crear una lista (List, ArrayList) en la que cada elemento sea una "clase" o un "struct" con datos como fila, columna, valor. Si debe primar la velocidad de acceso sobre el espacio ocupado, la estructura adecuada sería una tabla Hash.


09-Oct-2015 12:33
Angel Bravo

¿Existe en Java el concepto de "struct" como en c?¿O a qué se refiere exactamente? mi idea era tener una clase del tipo:

class NombreDeLaClase {
  NombreDeLaClase(int tamanyo) {
     vector = new double[tamanyo];
}
   E ir llenando con objetos de esa clase una lista, ¿esa sería la idea?


09-Oct-2015 12:46
Nacho Cabanes (+32)

En Java no existe la palabra clave "struct". Si quieres imitar un registro que sólo contenga datos, lo habrías con una clase que no tenga métodos.

Yo crearía una clase llamada "Casilla", que represente cada "dato visible", con aributos como la fila, la columna, el valor, el color, etc. Es fácil que esta clase no necesitara ningún método, por lo que se estaría comportando como un "struct" de C.

Luego, existiría una clase contenedora, llamada (por ejemplo) "ListaDeCasillas", con métodos como "Añadir(casilla)" (realmente Anyadir o algo similar) y "Obtener(fila,col): Casilla".

El cómo implementes esa clase contenedora (básicamente List o Hashtable) depende de qué quieras optimizar, si uso de espacio o velocidad de acceso.

El problema de tu planteamiento es que estás usando internamente un array, de modo que estás limitando la cantidad máxima de datos utilizable.


09-Oct-2015 13:05
Angel Bravo

Si me recuerda de otros mensajes, siempre trato de orientar lo que aprendo aquí en hacer programas de estadística, que es mi terreno. Estaba avanzando en uno que está estructurado en tres partes distintas -tanto en la interfaz como en los cálculos- dependiendo de si hablamos de una, dos, o N-variables. Eso obliga a saber la dimensión de la matriz de cálculos antes de hacer cualquier operación. Justo al revés que en un programa "en condiciones", de ahí que quiera salirme de matrices de datos, viéndolo como un listado de vectores, pues te permite entre otras cosas, que sean vectores de distinta longitud y -creo- unificar todas las interfaces.


09-Oct-2015 13:15
Nacho Cabanes (+32)

Sí, claro que te recuerdo.

Pero, comparando con un vector de datos, una "List" tiene la ventaja de acceso indexado, como los arrays (puedes obtener el "dato[3]") pero a la vez puedes añadir al final de la lista en cualquier momento, sin necesidad de limitar el tamaño máximo.

Eso me recuerda que las listas y las tablas hash no aparecen en la versión "pública" del curso de Java, a pesar de lo útiles que resultan. Sólo están en la versión "de trabajo" de mis alumnos, porque un concurso en el que participan una vez al año se debe hacer en Java o en C++, no en C#, que es el lenguaje que ellos aprenden, así que tengo una versión ampliada de los apuntes para ellos. Si consigo sacar un momento durante este fin de semana, publico una versión "pública" actualizada, por si te resultara útil.


09-Oct-2015 13:18
Angel Bravo

Espero que el recuerdo sea para bien :P Estaré pendiente de la publicación, gracias.






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)