Java - Memoria dinamica "Copiar objectos"

 
Vista:

Memoria dinamica "Copiar objectos"

Publicado por jomismo (28 intervenciones) el 18/02/2005 10:54:46
public class Coleccio {

int contador;
Contenedor primer;
Contenedor ultim;

public Coleccio(){primer=null;ultim=null;contador=0;}

private class Contenedor{
Object o;
Contenedor n;
Contenedor p;

private Contenedor(){o=null;n=null;p=null;}
private Contenedor(Object o,Contenedor n,Contenedor p){this.o=o;this.n=n;this.p=p;}


}

public boolean esbuida(){
return ultim==null;
}/

public void add(Object o){

Contenedor temp = new Contenedor();
temp.o=o;

if(!esbuida()){
ultim.n=temp;
temp.p=ultim;
ultim=temp;
}
else ultim=primer=temp;
contador = contador++;
}


Bueno os paso la clase coleccio para ke entendais lo ke kiero

Una coleccion es como una caja grande que contienes dentro cajas pequeñas llamadas contendores

En la coleccion (caja grande) tenemos la direcion del primer y del ultimo elemento asi como un contador para conocer cuantos elementos tenemos.

Los contenedores "cajas pequeñas dentro la grande " contienen una referencia al contenedor siguiente y al anterior , asi como contiene un objeto
una persona , mueble,vehiculo....

Bien debo crear la classe para copiar una coleccion (c1),asi llamada,
pero no se que funcion utilizar
osea debo crear una nueva coleccion "(c2)" , ycopiar lo de la c1 aqui todos
los containers

no me sirve el hacer

c2 .primer=c1.primer
pejemplo
pq esto lo que hace es asignarle la direccion de memoria no lo copia pq en teoria cuando borre el primer elemento de c1
tyambien se borrara el c2 y eso no kiero ke pase

total solo kiero conocer la funcion para copiar
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

RE:Memoria dinamica

Publicado por Wilfredo Vargas Almendras (314 intervenciones) el 18/02/2005 12:33:08
Hola, bueno lo que te sugiero es que utilices la interface Cloneable, a que me refiero, pues que en la cabecera de tu clase Coleecio tengas lo siguiente:

public class Coleccio implements Cloneable{
.
.
.
public Coleccio clonar(){
try{
return (Coleccio)super.clone();
}catch(Exception e){}
return null;
}
}

class Prueba{
public static void main(String[] wil){
Coleccio c1 = new Coleccio();
Coleecio c2 = c1.clonar(); // Aqui sacas una copia de c1 en c2
}
}

Espero te sirva
SALUDOS Wilfredo Vargas Almendras
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

Me da un error?

Publicado por jomismo (15 intervenciones) el 18/02/2005 13:36:39
/exemples/interador/Menu.java [40:1] c2 is already defined in main(java.lang.String[])
Coleccio c2 = c1.clonar();
^
1 error
Errors compiling.

Me da este error en el main sabrias decrime pq?


exemples.interador;

public class Menu{



public static void main(String[] args) {

Coleccio c1=new Coleccio();

Persona p = new Persona(\"43747475a\",\"xavier\",\"biesa\",\"Music\",973266668);
c1.add(p);

System.out.println(\"Afegim persona en una coleccio buida\\n\" + c1.toString());

Coleccio c2=new Coleccio();
Coleccio c2 = c1.clonar();
System.out.println(\"C1\\n\" + c1.toString() + \"\\nC2\\n\" + c2.toString());

Te he reducido el main pq lo ke havia son tonterias ahora inecesarias
Supongo ke lo tenia ke hacer asi
crear una nueva coleccion y luego
Coleccio c2 = c1.clonar();

ya ves el error ke me dice?

Te paso tb la funcion coleccio para que veas?

public class Coleccio implements Cloneable {

int contador;
Contenedor primer;
Contenedor ultim;

public Coleccio(){primer=null;ultim=null;contador=0;}

private class Contenedor{
Object o;
Contenedor n;
Contenedor p;

private Contenedor(){o=null;n=null;p=null;}
private Contenedor(Object o,Contenedor n,Contenedor p){this.o=o;this.n=n;this.p=p;}


}

public boolean esbuida(){ //Funcio que comprobara que hi hagi o no elements al array
return ultim==null;
}//Final esbuida

public void add(Object o){

Contenedor temp = new Contenedor(); //acaben de crear una capsa
temp.o=o; //pose el objecte ke ens pasen per parametre a a capsa

if(!esbuida()){ //Si no existeix ultim aixo vol dir que encara no he m creat cap element
ultim.n=temp;
temp.p=ultim;
ultim=temp;
}
else ultim=primer=temp; //per conseguent primer sera ultim
contador = contador++; //EL contador augmentara xke em afegit un nou element
}


public void delete(Object o)
{ Contenedor temp = new Contenedor();

if(!esbuida())
{ if (primer.n == null)
{ if (primer.o == o);
{ primer = null;
ultim = null;
contador = 0;}
}
else
{ temp.o = primer;
while(temp.n != o)
{ temp.o = temp.n;}

if (temp.n == o)
{ (temp.p).n = temp.n;
(temp.n).p = temp.p;
contador --;}
else
{ System.out.println(\"No hi ha cap objecte igual\");}
}
}
else
{ System.out.println(\"No hi ha cap element\");}
}


public Object primer(){
return primer.o;}

public Object ultim(){
return ultim.o;}

public int size(){
return contador;}

public void copy(Coleccio c){

if(!c.esbuida()){



}

}//Final copy
public String toString(){
String retorn=\"\";
Contenedor temp=primer;

while(temp!=null){
retorn = retorn + temp.o.toString();
temp=temp.n;
}

return retorn;

}

public Coleccio clonar(){
try{
return (Coleccio)super.clone();
}catch(Exception e){}
return null;
}
}


Tu funcion es la ultima como ves y en apariencia esta bien
ya ke no me da error y me deja compilar

Por cierto el error me indica ke ya existe una coleccion llamada c2?pq no es asi , solo tengo c1.

Gracias x atenderme

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

RE:Error Detectado

Publicado por Wilfredo Vargas Almendras (314 intervenciones) el 18/02/2005 14:14:36
Hola, bueno tu error es sencillo, el caso es que en lo siguiente que es de tu codigo tienes:

public static void main(String[] args) {
Coleccio c1=new Coleccio();
Persona p = new Persona(\"43747475a\",\"xavier\",\"biesa\",\"Music\",973266668);
c1.add(p);
System.out.println(\"Afegim persona en una coleccio buida\\n\" + c1.toString());
Coleccio c2=new Coleccio();
Coleccio c2 = c1.clonar(); // AQUI ESTA EL ERROR, es como si estuvieras volviendo a declarar c2, es por eso que te sale error.
-------------------------------------------------------------------------------
LO CORRECTO
Coleccio c2=new Coleccio();
c2 = c1.clonar();

SALUDOS Wilfredo Vargas Almendras
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

Gracias Wilfredo

Publicado por jomismo (15 intervenciones) el 18/02/2005 14:20:28
Correcto todo va bien
muxisimas gracias

Fallo de novato
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