Как перенести определенный элемент в список массивов на первый элемент
Например: Список
A B C D E
Учитывая C, переключитесь на
C A B D E
Обратите внимание, что размер массива изменится, некоторые элементы могут быть удалены во время выполнения
Collections.swap(url, url.indexOf(itemToMove), 0);
Этот оператор не работает, потому что он выводит C B A D E not C A B D E, как его исправить?
Спасибо.
Ответы
Ответ 1
Что вам нужно, это очень дорогостоящая операция в ArrayList
. Это требует смещения каждого элемента между началом списка и местоположением C
вниз на единицу.
Однако, если вы действительно хотите это сделать:
int index = url.indexOf(itemToMove);
url.remove(index);
url.add(0, itemToMove);
Если это частая операция для вас, а случайный доступ является менее частым, вы можете рассмотреть возможность перехода на другую реализацию List
, такую как LinkedList
. Вы также должны рассмотреть вопрос о том, является ли список правильной структурой данных вообще, если вы так обеспокоены порядком элементов.
Ответ 2
Используйте это: Удалить: ArraylistObj.remove(object);
Добавление в определенное положение: ArrayListObj.add(position, Object);
В соответствии с вашим кодом используйте это:
url.remove("C");
url.add(0,"C");
Ответ 3
Проблема в том, что вы меняете C на A, поэтому A B C D E становится C B A D E.
Вы можете попробовать что-то вроде этого:
url.remove(itemToMove);
url.add(0, itemToMove);
Или, если url
является LinkedList
:
url.remove(itemToMove);
url.addFirst(itemToMove);
Ответ 4
Еще одно решение, просто переходите от 0
до indexOf(itemToMove)
.
Это моя версия Kotlin:
val list = mutableListOf('A', 'B', 'C', 'D', 'E')
(0..list.indexOf('C')).forEach {
Collections.swap(list, 0, it)
}
Извините, я не знаком с Java, но немного узнал Котлина. Но алгоритм один и тот же.
Ответ 5
Этот код позволит вам увеличить размер списка и вставить элементы без какого-либо нарушения порядка списка
private void insert(double price){
for(int i = 0; i < keys.size(); i++){
if(price > keys.get(i)){
keys.add(null);
for(int j = keys.size()-1; j > i; j--){
Collections.swap(keys, j, j-1);
}
keys.add(price);
Collections.swap(keys, keys.size()-1, i);
keys.remove(keys.size()-1);
return;
}
}
keys.add(price);
}
Ответ 6
Скажем, у вас есть массив:
String[] arrayOne = new String[]{"A","B","C","D","E"};
Теперь вы хотите поместить C
в индекс 0
получить C
в другой переменной
String characterC = arrayOne[2];
Теперь запустите цикл, как показано ниже:
for (int i = (2 - 1); i >= 0; i--) {
arrayOne[i+1] = arrayOne[i];
}
Выше 2
есть индекс C
. Теперь вставьте C
в индекс, например, на 0
arrayOne[0] = characterC;
Результат выше цикла будет таким:
arrayOne: {"C","A","B","D","E"}
В конце мы достигаем нашей цели.