it-roy-ru.com

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

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

A B C D E

Учитывая C, переключиться на 

C A B D E

Обратите внимание, что размер массива изменится, некоторые элементы могут быть удалены во время выполнения

Collections.swap(url, url.indexOf(itemToMove), 0);

Это утверждение не работает, потому что оно выводит C B A D E, а не C A B D E, как это исправить?

Благодарю. 

43
user782104

То, что вы хотите, это очень дорогая операция в ArrayList. Это требует сдвига каждого элемента между началом списка и местоположением C вниз на единицу.

Однако, если вы действительно хотите это сделать:

int index = url.indexOf(itemToMove);
url.remove(index);
url.add(0, itemToMove);

Если для вас это частая операция, а произвольный доступ встречается реже, вы можете подумать о переходе на другую реализацию List, такую ​​как LinkedList. Вам также следует рассмотреть вопрос о том, является ли список правильной структурой данных, если вы так озабочены порядком элементов.

76
Chris Hayes

Сделай это:

  1. Удалитьэлемент из списка: ArraylistObj.remove(object);
  2. Добавитьэлемент назад к спискув определенной позиции: ArrayListObj.add(position, Object);

Согласно вашему коду используйте это:

url.remove("C");
url.add(0,"C");
11
Venkata Krishna

Проблема в том, что вы меняете 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
hbsrud

Другое решение, просто продолжайте переключаться с 0 на indexOf(itemToMove).

Это моя версия Kotlin:

val list = mutableListOf('A', 'B', 'C', 'D', 'E')
(0..list.indexOf('C')).forEach {
    Collections.swap(list, 0, it)
}

Извините, я не знаком с Java, но немного изучил Kotlin. Но алгоритм тот же.

2
MYLS

Этот код позволит вам увеличить размер списка и вставлять элементы, не нарушая порядок списка 

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);
}
0
sbc

Допустим, у вас есть массив:

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"}

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

0
Zulqarnain