Difference and best way to do Collection´s Assignment, Shallow Copy, Lazy Copy and Deep copy
===

I am trying to have an overall view of collection different ways of copying. I think I am getting the concept but need so rounding, and I need is also useful to have such a piece of summary (feel free to modify my post). I have:

Collection<?> a,b; //I omit generics


So what are my chances of copying the collection?:

* Assignment (Whats the difference with next one?)

        a=b

* Shallow copy (So I understand a and b are the same but different pointers for same? How does this affect in Java)  

        a = new ArrayList(b);  // Or any other implementation of Collections
        a = b.clone(); //This also? 

* Lazy Copy (I understand the pointer to the list is different but content objects are referenced through the same pointer)

        b = new ArrayList();
        for (Object o : a) b.add(a);

* Deep Copy

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

Are all right my assumptions?
 