Comparar implementación en Java de copia profunda y la eficiencia de dos maneras


java lograr una copia profunda de las dos formas, la escritura inexactitudes también, por favor, corríjanme gran Dios

1. manera Serializar copia profunda;

2. clonaron secuencialmente realización, cada tipo de dominio realización referencia variables;

Código es el siguiente:

Clase Maestro primero construido que implementa la interfaz, método clon implementado utilizando la secuencia de:

Maestro de clase implementos Cloneable, Serializable {
/ **

* /
static final privado a largo serialVersionUID = 4390576177500173601L;
public String nombre;
teléfono público cuerdas;
Maestro pública (String nombre, teléfono String) {
this.name = Nombre;
this.phone = teléfono;
}
@Anular
clon protegida Object () {
Maestro t = null;
ByteArrayOutputStream baos = new ByteArrayOutputStream ();
ObjectOutputStream b = null;
tratar {
b = new ObjectOutputStream (baos);
b.writeObject (this);

} Catch (IOException e) {
e.printStackTrace ();
}finalmente{
tratar {
b.close ();
} Catch (IOException e) {
e.printStackTrace ();
}
}
ByteArrayInputStream bi = new ByteArrayInputStream (baos.toByteArray ());
tratar {
ObjectInputStream oi = new ObjectInputStream (bi);
t = (Maestro) oi.readObject ();
oi.close ();
bi.close ();
} Catch (IOException e) {
e.printStackTrace ();
} Catch (ClassNotFoundException e) {
e.printStackTrace ();
}

t retorno;
}

}


clase Trabajador de construcción, método implementado de referencia clonación

clase Trabajador implementos Cloneable {
public String nombre;
teléfono público cuerdas;
Trabajador público (String nombre, teléfono String) {
this.name = Nombre;
this.phone = teléfono;
}
@Anular
protegida clon Worker () {
Trabajador Trabajador = null;
tratar {
= Trabajador (trabajadores) super.clone ();
} Catch (CloneNotSupportedException e) {
e.printStackTrace ();
}
trabajador de regresar;
}

}
}


Escribir la prueba:

CloneCompare public class {
public static void Main (args String []) {
Trabajador w = nuevo trabajador ( "Lisi", "123");
Maestro t = nuevo Maestros ( "Wangwu", "123123");
largo tiempo1 = System.currentTimeMillis ();
for (int a = 0; a <10.000; a ++) {
w.clone ();
}
System.out.println (System.currentTimeMillis () - tiempo1);
largo tiempo2 = System.currentTimeMillis ();
for (int a = 0; a <10.000; a ++) {
t.clone ();
}
System.out.println (System.currentTimeMillis () - tiempo2);
}


}

resultados de la prueba son los siguientes:

3
615

Eficiencia diferencia ya es 200 veces, de hecho, el tipo de clase interna de aplicación no es una gran cantidad de casos, un simple clon del plomo es la mejor opción.


Publicado 20 artículos originales · ganado elogios 0 · Vistas a 10000 +

Supongo que te gusta

Origin blog.csdn.net/u011248560/article/details/43097847
Recomendado
Clasificación