Java переставить массив на основе номера элемента - PullRequest
4 голосов
/ 20 декабря 2011

Вот мой массив:

int[] myArray = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};

Допустим, я хочу переместить myArray [3] (это может быть любой элемент) и myArray [6] (то же самое с этим) в началомассив при перестановке спины, как я могу это сделать?Пример:

Это:

{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}

В это:

{3, 6, 0, 1, 2, 4, 5, 7, 8, 9}

Ответы [ 2 ]

4 голосов
/ 20 декабря 2011

Чтобы переместить индекс x вперед, вам необходимо:

  • Помнить, что находится в индексе x
  • Скопировать все из 0 в x - 1 вверходин индекс, например, с помощью System.arrayCopy
  • Установите значение по индексу 0 равным значению, которое вы запомнили на первом шаге

Например:

public void moveToHead(int[] values, int index)
{
    // TODO: Argument validation
    int value = values[index];
    System.arraycopy(values, 0, values, 1, index - 1);
    values[0] = value;
}

Обратите внимание, что System.arraycopy обрабатывает копирование соответствующим образом:

Если аргументы src и dest ссылаются на один и тот же объект массива, то копирование выполняется так, как если бы компоненты в позициях srcPos - srcPos +length-1 сначала копировались во временный массив с компонентами длины, а затем содержимое временного массива копировалось в позиции destPos через destPos + length-1 целевого массива.

упомянут ваш оригинальный примердва элемента - в то время как вы могли бы потенциально делать все это более эффективно, зная оба элемента заранее, было бы гораздо проще моделировать это как два moveToHead вызова.Вам нужно позаботиться о порядке - например, если вы хотите сначала переместить индекс 6 на голову, вам нужно переместить индекс 4, а не индекс 3, чтобы учесть первый шаг.

2 голосов
/ 20 декабря 2011

Другим решением может быть преобразование массива в список благодаря методу asList и простому использованию методов remove и add :

List<Integer> myList = new ArrayList<Integer>(Arrays.asList(myArray));
myList.add(myList.remove(myIndex));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...