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.