2011-12-20 2 views
2

Если у меня есть массив:Перегруппировка массив в Java

int[] myArray = new int[10] 
for (int i = 0; i < myArray.length; i++) { 
    myArray[i] = i; 
} 

//resulting array: {0, 1, 2, 3, 4, 5, 6, 7, 8, 9} 

Как я могу переместить все опережать на 4 вверх один пробел, и отправить 4 к спине? Пример:

это:

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

в этом:

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

это быстро? – Gevorg

ответ

3

Как об этом:

int[] myArray = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; 
System.arraycopy(myArray, 5, myArray, 4, 5); 
myArray[myArray.length-1] = 4; 

В приведенном выше коде, я использую метод arraycopy, чтобы скопировать диапазон 5 числа, начинающиеся с индекса 5, до индекса 4 в массиве, а затем просто установите 4 в последней позиции.

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

EDIT:

Более общее решение, способ для отправки на спину заданной позиции в массиве:

public static void sendBack(int[] array, int idx) { 
    int value = array[idx]; 
    System.arraycopy(array, idx+1, array, idx, array.length-idx-1); 
    array[array.length-1] = value; 
} 

Для примера, назовем его так:

sendBack(myArray, 4); 
// now myArray is {0, 1, 2, 3, 5, 6, 7, 8, 9, 4} 
2

Нравится?

int start = 4; 
int temp = myArray[start]; 
for(int i = start; i < myArray.length - 1; i++) { 
    myArray[i] = myArray[i+1]; 
} 
myArray[myArray.length-1] = temp; 

Это самый быстрый способ, которым я могу догадаться ...

Смежные вопросы