Подтвердить что ты не робот

Как перенести определенный элемент в список массивов на первый элемент

Например: Список

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, как его исправить?

Спасибо.

4b9b3361

Ответ 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"}

В конце мы достигаем нашей цели.