As you can see the easiest way of copying Lists is to use copy constructor that’s available in List implementations – here it’s ArrayList. It copies references to all elements (so it is a shallow copy) from source list into the new list.

Sometimes you may want to update an existing List with a new data. In such case Collections.copy(List dest, List src) performs really well. The method sets elements on the same positions in dest List and doesn’t re-size target list when needed. So, remember that dest List have to be of at least size of source List and allow for modifications. These corner cases are illustrated in the 4 copy… methods in the example above.