Простой своп гораздо лучше для «перемещения чего-либо» в ArrayList:
if(i > 0) {
Item toMove = arrayList.get(i);
arrayList.set(i, arrayList.get(i-1));
arrayList.set(i-1, toMove);
}
Поскольку ArrayList использует массив, если вы удаляете элемент из ArrayList, он должен «сдвигаться»все элементы после этого элемента вверх, чтобы заполнить пробел в массиве.Если вы вставляете элемент, он должен сдвинуть все элементы после этого элемента, чтобы освободить место для его вставки.Эти сдвиги могут быть очень дорогими, если ваш массив очень большой.Поскольку вы знаете, что хотите получить одинаковое количество элементов в списке, такой обмен позволяет вам очень эффективно «переместить» элемент в другое место в списке.
Как Крис Баклери Михал Кройцман отмечают, что в классе Collections есть даже удобный метод для сокращения этих трех строк кода до одной:
Collections.swap(arrayList, i, i-1);