Foros del Web » Programación para mayores de 30 ;) » Java »

Array de ArrayList

Estas en el tema de Array de ArrayList en el foro de Java en Foros del Web. Hola amigos, necesito hacer un array de arraylist para una aplicación, para ello he hecho lo siguiente: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código Java: Ver original ArrayList < ...
  #1 (permalink)  
Antiguo 09/07/2010, 11:46
 
Fecha de Ingreso: agosto-2009
Mensajes: 14
Antigüedad: 15 años, 3 meses
Puntos: 0
Array de ArrayList

Hola amigos, necesito hacer un array de arraylist para una aplicación, para ello he hecho lo siguiente:

Código Java:
Ver original
  1. ArrayList<Persona> betsList[] = new ArrayList[37] ;
  2.  
  3. for(int i = 0; i < betsList.length; i++)
  4.     betsList[i] = new ArrayList <Player>();

El caso es que Eclipse me da el siguiente mensaje de advertencia en la primera de las lineas antes mencionadas:

Type safety: The expression of type ArrayList[] needs unchecked conversion to conform to ArrayList<Player>[]

He probado hacer lo siguiente:

Código Java:
Ver original
  1. ArrayList<Persona> betsList[] = new ArrayList<Persona>[37] ;

y

Código Java:
Ver original
  1. ArrayList<Persona> betsList[] = new <Persona>ArrayList[37] ;

Sin embargo esto genera un error de compilación. ¿Alguien me puede decir a qué se debe la advertencia y cómo he de hacer para evitarla?
  #2 (permalink)  
Antiguo 09/07/2010, 12:26
Avatar de Gguer  
Fecha de Ingreso: abril-2009
Mensajes: 125
Antigüedad: 15 años, 7 meses
Puntos: 1
Respuesta: Array de ArrayList

Hola

Te confieso que nunca he usado Eclipse como IDE, y que también me confunde tu definición. Supongo que que quieres usar un ArrayList, pero estaría bueno que contarás lo que quisieras hacer. Lo que voy a decirte será con base en la suposición en que quieres usar un ArrayList.

Puedo ver que la inicialización del ArrayList no es la correcta. Cuando lo declaras, marcas que el tipo de objetos que se van a almacenar son de tipo Persona; sin embargo, cuando lo inicializas, le intentas poner un tamaño o longitud a la colección, lo cual no corresponde con la razón de ser de dicha colección.

Una colección no necesita que le sea definido un tamaño inicial. Tú puedes añadir tantos objetos como quieras a la colección: esa es su naturaleza.

Cuando inicializas al objeto ArrayList tendrás que decirle de nuevo el tipo de objeto que almacenará, o sea, tipo Persona.

La nueva declaración del objeto quedaría así:
Código Javascript:
Ver original
  1. ArrayList <Persona> betsList = new ArrayList <Persona>();

Espero que con esto puedas dejarnos una idea de lo que quieres hacer para poder ayudarte de mejor forma. Un saludo.
  #3 (permalink)  
Antiguo 09/07/2010, 13:37
 
Fecha de Ingreso: junio-2009
Mensajes: 9
Antigüedad: 15 años, 5 meses
Puntos: 0
Respuesta: Array de ArrayList

No se exactamente que estas tratando de hacer, pero por lo que veo tu quieres hacer un ArrayList que contenga como cada uno de sus elementos otro ArrayList. Primero para un ArrayList no se usan [] ya que de por si el ArrayList es un array no hay necesidad de especificarlo con corchetes. Inicializas el ArrayList diciendo la capacidad inicial si es lo que quieres (37) escribiendo:

ArrayList<ArrayList<Player>> betsList = new ArrayList<ArrayList<Player>>(37);

Y luego si haces el ciclo:

for(int i = 0; i < betsList.size(); i++)
betsList.add(new ArrayList <Player>());

Como ves inicializas un ArrayList que contendra otros ArrayList donde cada uno de ellos contendra objetos del tipo Player. Finalmente con el ciclo for se inicializan cada uno de los 37 ArrayList que contendran objetos del tipo Player. Espero que eso sea lo que necesitas.
  #4 (permalink)  
Antiguo 09/07/2010, 18:36
 
Fecha de Ingreso: agosto-2009
Mensajes: 14
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: Array de ArrayList

En primer lugar gracias por las respuestas. Vuelvo a explicarlo porque creo que no lo he expresado bien.

Gguer creo que no me has entendido bien, lo que tu me explicas es la forma de inicializar un ArrayList y yo no estoy intentando crear un array list sino un array de arraylist. Me explico con un ejemplo básico:

Estamos de acuerdo que esto es un int.

Código Java:
Ver original
  1. int minumero = 0;

Y por lo tanto si lo que quiero es un array de 12 int hacemos:

Código Java:
Ver original
  1. int misnumeros[] = new int [12];

Bueno pues ahora si esto es un ArrayList:

Código Java:
Ver original
  1. ArrayList<int> miarraylist = new ArrayList<int>();

¿No se puede hacer como con los int?

Quizá lo que yo estoy buscando es lo que dice guidojavier probaré con eso a ver que tal. De todas formas os explico el caso en concreto por si surgen nuevas ideas.

La cosa es que yo tengo un array con una lista de números. Estos números se corresponden con los números de una ruleta de casino. Por otro lado tengo un número de jugadores no definido ya que pueden ser desde uno hasta infinito.. el caso es que para agilizar un poco la cosa a la hora de seleccionar a los jugadores que han escogido el número que ha salido en la ruleta, lo que había pensado era hacer un array del mismo tamaño que el array de los números de la ruleta y dentro de cada una de las posiciones de este array introducir un arrayList en el que iría metiendo a los jugadores cada vez que hagan su apuesta, asi si por ejemplo sale el número 12 en la ruleta, pues me posicionaría en el array en la posición 12 y sacaría la lista de jugadores que se encuentran en esa posición y la cual se corresponde con los jugadores que han apostado al número correcto.

Espero que haya quedado un poco más claro el asunto... no obstante como he dicho puede que la solución de guidojavier me sirva.
  #5 (permalink)  
Antiguo 10/07/2010, 11:27
Avatar de Gguer  
Fecha de Ingreso: abril-2009
Mensajes: 125
Antigüedad: 15 años, 7 meses
Puntos: 1
Respuesta: Array de ArrayList

Hola

Creo que ya te he entendido. Quieres guardar en un arreglo los jugadores que puedan apostarle a cierto número pero como son infinitos quires una colección que no requiera un número máximo de posiciones; entonces sólo basta con declarar el ArrayList, sin hacer a un Array de tipo ArrayList, como te ha explicado muy bien guidojavier.

Si tienes números finitos en la ruleta del casino y a cada número le quieres asignar un tamaño infinito de jugadores que le han apostado a dicho número, se me ocurre que pudieras usar una colección Hashtable en la que los identifcadores o claves sean los números que conforman la ruleta y en cada posición agregues un ArrayList que contenga todos los jugadores que le apuestan a un número cualquiera.

Si la ruleta contiene los número de la serie del 1 al 10, y 2 jugadores le han apostado al número 7, podrías hacer esta declaración:

Código Java:
Ver original
  1. Hashtable <ArrayList> apuestas = new Hashtable<ArrayList>();
  2. int [] laRuleta = {1,2,3,4,5,6,7,8,9,10};
  3. Player apostador1 = new Player();
  4. Player apostador2 = new Player();
  5. ArrayList <Player> lista_apostadores = new ArrayList<Player>();
  6. apostador1.setApuesta(laRuleta[6]);
  7. apostador2.setApuesta(laRuleta[6]);
  8. lista_jugadores.add(apostador1);
  9. lista_jugadores.add(apostador2);
  10. apuestas.put(laRuleta[6], lista_apostadores);

No sé si es más complicado de lo que estás buscando, pero te lo explico:
El Hashtable funciona con una clave, la cual identificará al objeto que almacenes. En nuestro caso usaeremos el Hashtable para almacenar los números de la ruleta y los apostadores para cada número. Definimos dos apostadores, como en el ejemplo, que han decidido jugarle todo al número 7.

Para este caso he creado una lista de los números que contiene la ruleta y la he guardado en un arreglo de tipo int. Haciendo la suposición de que tienes un método en tu clase Player que le asigna el número que un jugador ha decidido apostar, se hace una llamada a tal método y pasamos como parámetro la posición en el array laRuleta que contiene al número apostado. La colección ArrayList contiene una lista de jugadores que le han apostado a ese número y ahí es donde guardas el objeto del apostador en turno, manteniendo la posibilidad de agregar a otro apostador posteriormente. El ejemplo anterior sólo muestra cómo crear dos apostadores para un solo número; en tu caso tendrías que instanciar un objeto ArrayList por cada número de la ruleta. Se me ocurre que lo podrías hacer mediante un ciclo y cada objeto guardarlo en un Array normal, para que después accedas a cada posición cuando lo requieras. Tendrás que hacer lo mismo para el objeto de tipo Player, pues cada objeto corresponde a un solo apostador.

Después de haber asignado todos los apostadores a cierto número y guardarlos en tu colección ArrayList, es momento para guardarlos en el Hashtable. La clave que le asignaremos a cada colección de apostadores será el número al que le han jugado.

Espero no haberte complicado más la existencia con este ejemplo. Creo que es una buena idea, aunque debe tener sus mejoras, y espero que te sirva para la solución a tu problema.

Saludos.

Última edición por Gguer; 10/07/2010 a las 11:39 Razón: Código
  #6 (permalink)  
Antiguo 11/07/2010, 18:58
 
Fecha de Ingreso: agosto-2009
Mensajes: 14
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: Array de ArrayList

Pues lo dicho que muchas gracias por las respuestas creo que ahora tengo el asunto mas claro

Hombre la solución del hashtable tampoco está mal se puede intentar

Pues nada q eso, un saludo

Etiquetas: arraylist
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:19.