Una duda con JAVA.

Buenas! Nose si será el subforo apropiado, si no lo es, que algun moderador lo mueva plis ^_^

Bueno, al grano. La duda que tengo es sobre una aplicación, imaginemos que se va a crear una aplicación que almacene el número de películas que tienes, con información sobre cada película. Cada película será un nuevo objeto de dicha clase.

Si no conocemos a priori el número de películas que el usuario tiene, no podemos poner peliculaY = new Pelicula();

¿Cómo se puede estructurar esta aplicacion? Nose si me he expresado bien... pero el concepto es mas o menos ese ^^

Muchas gracias!!
FCKU está baneado del subforo por "No especificado"
Uhmmm, no sé exactamente qué quieres hacer pero así a priori te diría que:

1) Modela cada película como un pojo.
2) Almacena las peliculas usando colecciones. No sé si te vendrá mejor una lista o un mapa pero usandolas te será sencillo insertar nuevas películas, modificarlas, borrarlas, etc.

Si tienes alguna duda pregunta
Usa otra estructura de datos, como por ejemplo, una lista.

- ferdy
Pues no... muy bien no te has explicado.

Por lo que he entendido necesitas almacenar varios objetos de una clase, pero no sabes el número a priori. Usa la API Collections. En concreto ArrayList o LinkedList pueden servirte.

Saludos.
Pues no sé, así de primeras se me ocurre que puedes hacerlo en Java con una base de datos sencillita en XML.

Un saludo!
FCKU está baneado del subforo por "No especificado"
Por cierto, por si usas las colecciones, mírate los tutoriales al respecto que hay aquí:
http://www.javahispano.org/tutorials.type.action?type=j2se
import java.util.Vector;

public class Filmoteca
{
public static void main ()
{
Vector pelis = new Vector ();
pelis.addElement ("Los Pichapiedra");
pelis.addElement ("Rocco se Vuelve Loco");
pelis.addElement ("Me molo a mi mismo");
pelis.addElement ("Otro título way");

System.out.println (pelis);

System.out.println ("Tengo " + pelis.size () +" pelis chorras");

System.out.println ("La primera: " + pelis.elementAt (1));

pelis.insertElementAt ("Otra peli super way", 3);

for (int i = 0; i < pelis.size (); i++)
System.out.print (""+pelis.elementAt (i));
}
}

No se si habrá algún error, pero es de copy&paste&understand.
Rurouni escribió:No se si habrá algún error, pero es de copy&paste&understand.


El método main debe recibir un String[] como parámetro, si no no te lo reconocerá como método de entrada ;)

Y un pequeño apunte. No se debe utilizar un Vector a menos que sea estrictamente necesario. Es mejor utilizar un ArrayList o LinkedList, ya que estos no están sincronizados.

Salu2!
Muchisimas gracias a todos por contestar!! ^^

Supongo que usaré el vector y si no tiraré de listas... ^^

Mil gracias de nuevo



Un saludo! :D
dagaren escribió:No se debe utilizar un Vector a menos que sea estrictamente necesario


A ver... que la interfaz que implementan es la misma, ArrayLis,t LinkedList y Vector. Todos son List. Es decir, los métodos para añadir, recuperar, eliminar,etc son los mismos. Las diferencias principales están en la implementación por debajo. Es más que recomendable utilizar ArrayList (si las inserciones se van a realizar al final) o LinkedList (si las inserciones se realizan 'por en medio'). Vector SÓLO en casos en los que sea necesario sincronización.

Salu2!
FCKU está baneado del subforo por "No especificado"
Hola de nuevo,

Si no te quieres complicar demasiado la vida iterando sobre listas y demás yo de tí haria esto:

1) modela cada pelicula como un pojo:

un pojo es una clase que solo sirve para almacenar datos y que no posee lógica aunque pueda implementar constructores, el metodo equals(), etc. Es decir, es una clase que, a priori, solo tiene metodos get y set.

Por ejemplo:

package lalala.lololo

public class Pelicula {
private Integer codigo;
private String titulo;
private String descripcion;

public Integer getCodigo () { return codigo }
public void setCodigo (Integer codigo) { this.codigo = codigo }

public String getTitulo () { return titulo }
public void setTitulo (Integer codigo) { this.titulo = titulo }

public String getDescripcion () { return descripcion }
public void setDescripcion (Integer codigo) { this.descripcion = descripcion }
}

2) Utiliza un hashmap para almacenar los datos

El hashmap contiene un par , donde la puede ser o bien un codigo arbitrario que no se repita nunca o el titulo de la pelicula, y el el pojo que hayas creado antes.

De este modo lo que consigues es:

a) Ya que lo tienes mapeado no tienes que iterar por toda la lista para encontrar una pelicula concreta. Es decir, si quieres ver el nombre del director de la pelicula con codigo "50" no tienes que recorrerlas todas, solo hacer:

Pelicula pelicula = (Pelicula) mapa.get (new Integer(50));
System.out.println (pelicula.getTitulo());

o si decides que la clave sea el titulo de la pelicula mas de lo mismo:

Pelicula pelicula = (Pelicula) mapa.get ("Matrix");
System.out.println (pelicula.getDirector());


Esto te puede ser util para borrar, modificar o consultar peliculas. Yo consideraria el usar mapas (en concreto un HashMap)

Y si quieres saber el numero de peliculas que tienes cargadas el HashMap tiene un metodo size().

---------------

Con respecto a Vector, Hashtable y demás:

El mejor NO UTILIZAR NI VECTOR NI HASHTABLE. Como bien habeis comentado antes sus metodos estan sincronizados. Esto en algunos casos es importante pero en la inmensa mayoria no es necesario.

Si teneis que utilizar listas o mapas es mejor usar ArrayList o HashMap porque sus metodos, si no le indicas lo contrario, no están sincronizados.

Os comento esto porque en una aplicación pequeña no pasa nada, pero en una aplicacion grande puedes tener muchisimos problemas de rendimiento por utilizar muchos vectores y muchas hashtables sin motivo.
10 respuestas