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

Añadir a LinkedList

Estas en el tema de Añadir a LinkedList en el foro de Java en Foros del Web. Buenas a todos, me he encontrado con un problema y no se si soy yo que estoy equivocado y no puede hacerse o lo estaré ...
  #1 (permalink)  
Antiguo 11/11/2010, 14:24
 
Fecha de Ingreso: septiembre-2010
Mensajes: 14
Antigüedad: 13 años, 7 meses
Puntos: 0
Añadir a LinkedList

Buenas a todos,
me he encontrado con un problema y no se si soy yo que estoy equivocado y no puede hacerse o lo estaré haciendo mal.

Añado datos a una lista y me elimina los primeros y me duplica los segundos (¿?)

Primero instancio.
Código:
LinkedList<Valores> list = new LinkedList<Valores>();
Valores val = new Valores();
Añado datos:
Código:
val.setCaja("caja1");
val.setControl("1");
list.add(val);
Y más adelante añado:
Código:
val.setCaja("caja2");
val.setControl("2");
list.addLast(val);
Al imprimir los resultados de la siguiente forma:
Código:
for (int i=0;i<list.size();i++){
	out.println("<br>Lista: " + list.get(i).getCaja() + " - " + list.get(i).getControl());
}
Obtengo lo siguiente:
Código:
Lista: caja2 - 2 
Lista: caja2 - 2
¿No deberia haber impreso la lista anterior + ésta?
Si alguien me pudiera ayudar se lo agradecería mucho.

Gracias y un saludo.

P.D. El motivo de porque lo he hecho en dos veces, es porque mas adelante quiero meter la lista en una sesion y poder ir añadiendo datos y claro, antes hice esta prueba y vi que no funciona.
  #2 (permalink)  
Antiguo 11/11/2010, 15:37
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 14 años, 11 meses
Puntos: 306
Respuesta: Añadir a LinkedList

Una cosa es el objeto, y otra la variable/referencia.

tu variable val siempre apunta al mismo objeto, así que cuando haces

Cita:
val.setCaja("caja2");
val.setControl("2");
modificas el objeto que ya existe (no creas uno nuevo), y cuando lo añades a la lista, realmente estás añadiendo una segunda referencia al mismo objeto.

Resumiendo, lo dos elementos de tu lista apuntan al mismo objeto, el único que has creado.
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #3 (permalink)  
Antiguo 12/11/2010, 03:03
 
Fecha de Ingreso: septiembre-2010
Mensajes: 14
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: Añadir a LinkedList

Hola Xerelo,
muchas gracias por contestar, ahora entiendo porqué me sobreescribía...

Si quisiera meter en lista lo mismo pero sin que me sobreescriba, entiendo que debería hacer algo como:

Código:
list.add("casa", "2")
list.add("luna", "3")
.......
De esta forma, podría añadir más adelante ya que no sobreescribiría ningún objeto.

Al llevarlo acabo, he visto que únicamente puedo llenarlo de la siguiente forma:
Código:
list.add("casa")
o
list.add(1, "casa")
De que forma podría rellenar en una fila varios campos?

Muchas gracias por todo y un saludo.
  #4 (permalink)  
Antiguo 12/11/2010, 05:24
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 14 años, 11 meses
Puntos: 306
Respuesta: Añadir a LinkedList

No, tú has declarado una lista de Valores, y con el método que propones estarías añadiendo dos String, ni siquiera te dejaría compilar.

Lo que tienes que hacer es crear un objeto Valores para cada elemento que quieras añadir.

Si creas un constructor para Valores con los dos parámetros, podrías hacer

list.add (new Valores("caja1","1"));
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #5 (permalink)  
Antiguo 12/11/2010, 06:33
 
Fecha de Ingreso: septiembre-2010
Mensajes: 14
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: Añadir a LinkedList

Hola Xerelo,
ok, entiendo.

Voy a pelarme con ello.

Muchas gracias por tu tiempo y rapidez en contestar.

Un saludo!!

Etiquetas: añadir
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 16:25.