2010-11-23 4 views
0

Каков наилучший способ (элегантный/эффективный) скопировать два массива в новый?Скопируйте 2 массив в новый

Привет,

F

+0

вы должны по крайней мере попытаться найти немного, прежде чем отправлять вопрос .. – posdef 2010-11-23 10:14:22

+0

почему вниз голосование? stackoverflow отвечает на вопросы, которые должны иметь дело с программированием – Tyzak 2010-11-23 10:54:44

ответ

0

Использование System.arraycopy использует преимущества базового оборудования для выполнения копирования массива настолько эффективно, насколько это возможно.

В контексте вопроса вам нужно будет позвонить System.arraycopy дважды; например

int[] dest = new int[10]; 
int[] src1 = new int[5]; 
int[] src2 = new int[5]; 

// Populate source arrays with test data. 
for (int i=0; i<5; ++i) { 
    src1[i] = i; 
    src2[i] = i + 100; 
} 

System.arraycopy(src1, 0, dest, 0, src1.length); 
System.arraycopy(src2, 0, dest, src1.length, src2.length); 
5

Моя репутация не позволяет мне прокомментировать ответ Адамским, но есть ошибка в этой строке:

System.arraycopy(src2, 0, dest, src1.length - 1, src2.length); 

с src1.length - 1 в качестве аргумента destPos, вы перезаписать последний элемент, вставленный из src1 массива. В этом случае вы переписываете элемент на индекс 4, который является 5-м элементом массива.

Этот код может быть проще понять:

int[] array1 = { 1, 2, 3 }; 
    int[] array2 = { 4, 5, 6, 7 }; 
    int[] array3 = new int[ array1.length + array2.length ]; 

    System.arraycopy(array1, 0, array3, 0, array1.length); 
    System.arraycopy(array2, 0, array3, array1.length, array2.length); 

    for (int i = 0; i < array3.length; i++) { 
     System.out.print(array3[i] + ", "); 
    } 
Смежные вопросы