В исходном коде JDK 1.6 метод swap класса Collections записан так:
public static void swap(List<?> list, int i, int j) {
final List l = list;
l.set(i, l.set(j, l.get(i)));
}
Какая причина для создания окончательной копии переданного списка? Почему они просто не изменяют переданный список напрямую? В этом случае вы также получаете предупреждение необработанного типа.