static L cloneList(Collection l) { if (l == null) ret new L; // assume collection's mutex is equal to collection, which will be true unless you explicitly pass a mutex to synchronizedList() which no one ever does. synchronized(l) { ret new ArrayList(l); } }