Why do i get different behaviors with:
Collection col2 = new ArrayList(col);
Collection col2 = new ArrayList();
Collection col2 = new ArrayList(col);
will create a new ArrayList with size col.size() (+10%) and copy all elements from col into that array.
Collection col2 = new ArrayList();
will create a new ArrayList with initial size of 10 (at least in Sun implementation).
col2.addAll(col);
will copy all elements from col into the end of the col2 ArrayList, enlarging the backing array size, if needed.
So, depending on your col collection size, the behavior will be a bit different, but not too much.
It is preferable to use the first option - that will avoid at least one extra backing array expansion operation.