Diferencia y la mejor manera de hacer Asignación de colecciones, Copia superficial, Copia diferida y Copia profunda

EDITAR: información actualizada con respuestas

Estoy tratando de tener una visión general de la colección de diferentes formas de copia. Creo que estoy entendiendo el concepto, pero necesito redondearlo, y lo que necesito también es útil para tener un resumen de este tipo (siéntase libre de modificar mi publicación). Yo tengo:

Colección a, b; // omito los genéricos

Entonces, ¿cuáles son mis posibilidades de copiar la colección ?:

  • Asignación (exactamente el mismo objeto)

    a=b
    
  • Copia superficial (2 colecciones diff, referencias del mismo objeto, por lo que si agregamos / eliminamos un objeto de una lista, no se refleja en la otra)

    a = new ArrayList(b);  // Or any other implementation of Collections
    
    a = b.clone(); //This also? 
    
    b = new ArrayList(); //This also?
    for (Object o : a) b.add(a);
    
  • Copia perezosa (¿igual que superficial en Java?)

  • Copia profunda (diferentes listas con objetos copiados, por lo que modificar una lista u objeto no afecta a la otra)

    b = new ArrayList(); // Or any other implementation of Collections
    for (Object o : a) b.add(o.clone());
    

Entonces me imagino estos casos:

Colección Copia / duplicación (o devolución de datos DAO)

                       SyncStateOfListing    OriginalListingSafe   OriginalObjectsStateSafe  
 Mutual aware of changs
 **********************
 Assignment in other var         y - Mirrored         n                      n
 Iterator*                       y - Concurrnt.Exc    n (remove())           n    

 New is aware of old´ changes (RO ProxyView)
 ******************************************

 Coll.unmodifiableColl(orig)     y - Mirrored**       y NotSuppOpExc on RW   n  
 Coll.unmodif(orig).iterator()*  y - Concurrnt.Exc    y NotSuppOpExc on RW   n
 Enum                            y - ?                y No RW methods                  

 Independent copies
 ******************
 Shallow Copy                    n                    y                      n
 Deep Copy                       n                    y                      y (expensive) 


 * Iterator we force to regenerate it in any use and we get Exceptions if at some moment the snapshot is obsolete, so we assure the state for which the operation is meant, transactionally. Cannot add elements or retraverse.
 ** The "new" collection is totally mirrored for any change on the original, but internally, inner iterator is always used when traversing (the obvious stateful operation) so we get the same properties as when using it

¿Están bien mis suposiciones?

Respuesta 1

Tengo este código ... import java.util. *; clase pública SwitchExample {public static void main (String [] args) {System.out.print ("Enter ID:"); Escáner escáner = nuevo escáner (...

Tengo una JTable dentro de un JPanel. El número máximo de filas en la tabla es 10. Según las filas de la tabla, necesito cambiar el tamaño del JPanel. No debería obtener ningún scrollPane. Entonces, para ser simple: basado en la tabla ...

Estoy tratando de reemplazar todos los \ caracteres a \\ por java. Esta puede ser una pregunta tonta, pero he intentado muchas cosas. Mi intento está a continuación: String strToReplace = oldString; strToReplace = ...

Tengo este método de fábrica estático: public static CacheEvent getCacheEvent (Category category) {switch (category) {case Category1: return new Category1Event (); ...