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

arraylist de arraylist

Estas en el tema de arraylist de arraylist en el foro de Java en Foros del Web. hola, estoy intentando hacer un arraylist de arraylist pero no me funciona: Código: ArrayList<String> primero = new ArrayList<String>(); ArrayList<ArrayList<String>> devuelve = new ArrayList<ArrayList<String>>(); try{ Statement ...
  #1 (permalink)  
Antiguo 13/04/2011, 01:05
 
Fecha de Ingreso: marzo-2009
Mensajes: 509
Antigüedad: 15 años, 1 mes
Puntos: 17
arraylist de arraylist

hola, estoy intentando hacer un arraylist de arraylist pero no me funciona:

Código:
ArrayList<String> primero = new ArrayList<String>();
    	ArrayList<ArrayList<String>> devuelve = new ArrayList<ArrayList<String>>();
    	
	try{    	
    		Statement s = conn.createStatement();
    		rs = s.executeQuery(query);
    		int columnas = 6;
            while (rs.next()) {
            	for(int j = 1; j<columnas; j++){
            		primero.add(rs.getString(j));
            	}
            	System.out.println(primero.toString());
            	devuelve.add(primero);
            	primero.clear();
            }  
            System.out.println(devuelve.toString());
El los arrayList "primero" tienen los datos perfectos, pero devuelve está vacío, ¿qué estoy haciendo mal?

Gracias!!!
  #2 (permalink)  
Antiguo 13/04/2011, 01:15
Avatar de Heimish2000  
Fecha de Ingreso: enero-2011
Ubicación: Madrid
Mensajes: 844
Antigüedad: 13 años, 2 meses
Puntos: 89
Respuesta: arraylist de arraylist

Tienes dos ArrayList pero sólo un new, yo creo que los tiros irán por ahí.
  #3 (permalink)  
Antiguo 13/04/2011, 01:20
 
Fecha de Ingreso: marzo-2009
Mensajes: 509
Antigüedad: 15 años, 1 mes
Puntos: 17
Respuesta: arraylist de arraylist

umm, debo estar cegadísima, yo veo dos new...

Código:
ArrayList<String> primero = new ArrayList<String>();
ArrayList<ArrayList<String>> devuelve = new ArrayList<ArrayList<String>>();
Puedes especificarme un poquito más a que te refieres?? gracias!!!
  #4 (permalink)  
Antiguo 13/04/2011, 01:38
Avatar de Heimish2000  
Fecha de Ingreso: enero-2011
Ubicación: Madrid
Mensajes: 844
Antigüedad: 13 años, 2 meses
Puntos: 89
Respuesta: arraylist de arraylist

No había visto el primer new, el que está cegadísimo soy yo, lo siento
  #5 (permalink)  
Antiguo 13/04/2011, 01:43
 
Fecha de Ingreso: marzo-2009
Mensajes: 509
Antigüedad: 15 años, 1 mes
Puntos: 17
Respuesta: arraylist de arraylist

jeje, nada!!

Investigando un poquito he descubierto cositas, mi código de investigación:

Código:
    		Statement s = conn.createStatement();
    		rs = s.executeQuery(query);
    		int columnas = 6;
            while (rs.next()) {
            	primero.clear();
            	for(int j = 1; j<columnas; j++){
            		primero.add(rs.getString(j));
            	}
            	System.out.println("unidimensional " + primero.toString());
            	devuelve.add(primero);
            	System.out.println ("bidimensional " + devuelve.toString());
            }
Cada vez mi array bidimensional tiene el tamaño que debe tener pero con todos los valores iguales al último, no lo entiendo, porque no añade a partir del valor que ya tenía en lugar de sobreescribir??


Bueno, el problema no es que sobreescriba, es que como la variable "primero" la modifico, se modifica tamibén en el arrayList, ¿cómo puedo hacerlo para que no pase?

Graicas!!!

Última edición por cucuru; 13/04/2011 a las 02:40
  #6 (permalink)  
Antiguo 13/04/2011, 03:13
Avatar de leocente  
Fecha de Ingreso: diciembre-2009
Mensajes: 62
Antigüedad: 14 años, 3 meses
Puntos: 4
Respuesta: arraylist de arraylist

Yo te voy a explicar porque cuando bajas el "primero.clear()" te retorna vacio

Bien, es simple, porque "primero" es un Objeto y lo que vos haces cuando escribis devuelve.add(primero) el nuevo elemento del "devuelve" es una REFERENCIA del objeto "primero", no se si me explico.
Es decir, supongamos que

Objeto primero= "ab"

vos haces devuelve.add(primero) , claro esta que devuelve seria entonces devuelve= [[ab]]

pero ese ab de devuelve es ua REFERENCIA de el objeto "primero", es decir que hagas lo que hagas con el objeto "primero" se va a modificar el elto ab de devuelve y en todas las partes que hayas referenciado al obejto primero.
A no ser que crees otro objeto aparte de esos dos que tenes y hagas una copia exacta del objeto primero, y esa copia es lo que vas a agregar al devuelve, no vas a agregar "primero".

Por eso cuando pones primero.clear() al al final y dentro del while se vacian todos los elementos de "primero" por ende tambien se van a vaciar los elemenos de "devuelve".

No se si me explique bien, Si en tu primero codigo, abajo y afuera del while escribis primero.add("a"); y imprimis System.out.println(devuelve.toString()); vas a saber de lo que hablo.


Saludos que andes bien!
  #7 (permalink)  
Antiguo 13/04/2011, 03:43
 
Fecha de Ingreso: marzo-2009
Mensajes: 509
Antigüedad: 15 años, 1 mes
Puntos: 17
Respuesta: arraylist de arraylist

Gracias! justo me había dado cuenta! tengo que declarar el arrayList "primero" dentro del bucle!!

Graicas!!!

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 16:14.