Java - Dudas con lista estatica

 
Vista:

Dudas con lista estatica

Publicado por NmMedina (13 intervenciones) el 26/06/2011 00:34:50
Buenas.. les escribo por que quiero resolver este problemita que tengo.. resulta que tengo una lista que lleno desde una clase externa y utilizo... el detalle esta que cuando la dejo de utilizar esta el garbage collection hace fiesta con ella y la tumba y no puedo accesar a ella de nuevo.. hay alguna forma de no perder el contenido de la misma sin tener ke hacer el procedimiento que anteriormente se hizo para llenarla?


Este es un codigo de ejemplo

Ejecuto los 2 primeros para declarar llenar y agregar datos a la lista. Luego quiero saber cuales son los datos de dicha lista con el 3ro pero me la da vacia (por el garbage collection)

Alguna forma de no perder esos datos?

Gracias!

Archivo 1

import java.util.ArrayList;
public class Principal {
static ArrayList<String> Lista = new ArrayList<String>();
public void additemList() {
Lista.add("Numan");
Lista.add("Nestor");
Lista.add("Nieves");
Lista.add("Nuris");
Lista.add("HOla");
Lista.add("Como");
Lista.add("Estas");
}
}


Archivo 2

public class Segunda {

public static void main(String[] args) {
Principal main = new Principal();
Segunda second = new Segunda();
main.additemList();
second.doIt();
second.setIt();
}

public void doIt(){
Principal main = new Principal();
for (int i = 0; i < main.Lista.size(); i++) {
System.out.println(main.Lista.get(i));
}
}

public void setIt(){
Principal main = new Principal();
main.Lista.add("asdrw234");
main.Lista.add("asdsdf");
main.Lista.add("asdasdqwe");
main.Lista.add("asdqwe");
main.Lista.add("asdaasd");
doIt();
}
}

Archivo 3

public class Tercera {

public static void main(String[] args) {
Principal asd = new Principal();
for (int i = 0; i < asd.Lista.size(); i++) {
System.out.println(asd.Lista.get(i));

}
}
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Dudas con lista estatica

Publicado por Pedro (6 intervenciones) el 26/06/2011 21:05:12
En la clase Tercera estas creando un nuevo objeto, el cual no es el mismo que antes creaste. Yo haria algo asi:

Archivo 1

import java.util.ArrayList;
public class Principal {
static ArrayList<String> Lista = new ArrayList<String>();
public void additemList() {
Lista.add("Numan");
Lista.add("Nestor");
Lista.add("Nieves");
Lista.add("Nuris");
Lista.add("HOla");
Lista.add("Como");
Lista.add("Estas");
}
}


Archivo 2

public class Segunda {

public static void main(String[] args) {
Principal main = new Principal();
Segunda second = new Segunda();
main.additemList();
second.doIt();
second.setIt();
}

public void doIt(){
Principal main = new Principal();
for (int i = 0; i < main.Lista.size(); i++) {
System.out.println(main.Lista.get(i));
}
}

public void setIt(){
Principal main = new Principal();
main.Lista.add("asdrw234");
main.Lista.add("asdsdf");
main.Lista.add("asdasdqwe");
main.Lista.add("asdqwe");
main.Lista.add("asdaasd");
doIt();
}
}

Archivo 3

public class Tercera {

private Principal p;

Tercera(){


public static void main(String[] args) {
Principal asd = new Principal();
for (int i = 0; i < asd.Lista.size(); i++) {
System.out.println(asd.Lista.get(i));

}
}
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Dudas con lista estatica

Publicado por Pedro (6 intervenciones) el 26/06/2011 22:04:57
En la clase Tercera estas creando un nuevo objeto, el cual no es el mismo que antes creaste. Yo haria algo asi:

Archivo 1

import java.util.ArrayList;
public class Principal {

private ArrayList<String> Lista = new ArrayList<String>();

Principal(){
additemList();
}

public void additemList() {
Lista.add("Numan");
Lista.add("Nestor");
Lista.add("Nieves");
Lista.add("Nuris");
Lista.add("HOla");
Lista.add("Como");
Lista.add("Estas");
}

public ArrayList<String> getLista(){
return Lista;
}



Archivo 2

public class Segunda {

private Principal main;
private ArrayList<String> ListaPrincipal = new ArrayList<String>();

Segunda(){
this.main = new Principal(); //realiza additemList
this.ListaPrincipal = main.getLista(); //Apunta a esa lista
doIt();
setIt();

}

public void doIt(){
for (int i = 0; i <ListaPrincipal .size(); i++) {
System.out.println(ListaPrincipal.get(i));
}
}

public void setIt(){

//otra opcion seria llamar main.getLista.add(... pero si llamas desde Tercera con un nuevo objeto de Principal a main.getLista te dara la lista sin los cambios que se ejecutan en esta clase, por eso apunto a la lista de Principal

ListaPrincipal .add("asdrw234");
ListaPrincipal .add("asdsdf");
ListaPrincipal .add("asdasdqwe");
ListaPrincipal .add("asdqwe");
ListaPrincipal .add("asdaasd");
doIt();
}

public ArrayList<String> getLista(){
return ListaPrincipal ;
}



Archivo 3

public class Tercera {

private Segunda s;
private ArrayList<String> ListaPrincipal = new ArrayList<String>();

Tercera(){
this.s=new Segunda(); //realiza dolt
ListaPrincipal=s.getLista();
}


public static void main(String[] args) {
ListaPrincipal = s.getLista();
for (int i = 0; i < ListaPrincipal.size(); i++) {
System.out.println(ListaPrincipal.get(i));
}

}
}


Espero que funcione, y sea lo que estas buscando. La idea es pasar la lista a tus clases, pero no crear nuevos Objetos ya que asi no obtines el mismo objeto sino uno nuevo.

Avisame si funciona.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Dudas con lista estatica

Publicado por Numan Medina (13 intervenciones) el 26/06/2011 22:53:39
Excelente... una forma de hacerlo.. Pero tengo un form que llama a una clase consultas donde tengo todo lo que tiene ke ver con la BD en esta clase tengo la lista (El problema era que cada ves ke instanciba la clase la lista moria), y lo que queria era no hacer la misma consulta varias vecs y simplemente sacar los datos de la lista (para optimizar un poco y trabajar menos con la BD) una solucion que se me ocurre hacer lo anterior en una nueva clase que contenga la lista para que cuando haga la instancia a la clase de la BD no la pierda sino que la tenga guardada en una clase aparte (pero al terminar de usar esta otra clase no perderia los datos de la lista? o tendria que obligatoriamente hacer una "ListaPrincipal" en mi form para mantenerla viva?)

Gracias y discula la molestia
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Dudas con lista estatica

Publicado por Pedro (6 intervenciones) el 26/06/2011 23:53:23
La verdad es que no entendi mucho lo que escribiste antes. Supongo que una BD, es una base de Datos? Si tu interes es grabar los Datos de la Lista, porque no los guardas en un archivo .ini en C:\temp por ejemplo (FileWriter), y guardas antes de salir (por ejemplo antes de un System.exit(0)) y cargas cuando entras a tu programa. Estas trabajando con un GUI? de ser asi podrias hacerlo desde un Menu.

...una solucion que se me ocurre hacer lo anterior en una nueva clase que contenga la lista para que cuando haga la instancia a la clase de la BD no la pierda sino que la tenga guardada en una clase aparte (pero al terminar de usar esta otra clase no perderia los datos de la lista? o tendria que obligatoriamente hacer una "ListaPrincipal" en mi form para mantenerla viva?)...

Si tienes un Form, estas usando el modelo MVC (Model View Controller)? Aqui un buen ejemplo: http://www.leepoint.net/notes-java/GUI/structure/40mvc.html
Independientemente si usas o no un MVC, si tu Form puede tener una Lista, esa lista podria recoger el resultado de la lista que fue cambiada, o operada en otra clase.

Espero te haya ayudado en algo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar