Вопрос-ответ

Make copy of an array

Создание копии массива

У меня есть массив, a который постоянно обновляется. Допустим, a = [1,2,3,4,5]. Мне нужно создать точную дублирующую копию a и вызвать ее b. Если a изменить на [6,7,8,9,10], b все равно должно быть [1,2,3,4,5]. Какой лучший способ сделать это? Я попробовал for цикл, подобный:

for(int i=0; i<5; i++) {
b[i]=a[i];
}

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

Переведено автоматически
Ответ 1

Вы можете попробовать использовать System.arraycopy()

int[] src  = new int[]{1,2,3,4,5};
int[] dest = new int[5];

System.arraycopy( src, 0, dest, 0, src.length );

Но, вероятно, в большинстве случаев лучше использовать clone():

int[] src = ...
int[] dest = src.clone();
Ответ 2

вы можете использовать

int[] a = new int[]{1,2,3,4,5};
int[] b = a.clone();

также.

Ответ 3

Если вы хотите создать копию:

int[] a = {1,2,3,4,5};

Вот как нужно поступить:

int[] b = Arrays.copyOf(a, a.length);

Arrays.copyOf может быть быстрее, чем a.clone() для небольших массивов. Оба элемента копируются одинаково быстро, но clone() возвращает Object поэтому компилятору приходится вставлять неявное приведение к int[]. Вы можете увидеть это в байт-коде, что-то вроде этого:

ALOAD 1
INVOKEVIRTUAL [I.clone ()Ljava/lang/Object;
CHECKCAST [I
ASTORE 2
Ответ 4

Хорошее объяснение от http://www.journaldev.com/753/how-to-copy-arrays-in-java

Методы копирования массива Java


Object.clone(): класс Object предоставляет метод clone(), и поскольку array в java также является объектом, вы можете использовать этот метод для достижения полной копии массива. Этот метод вам не подойдет, если вы хотите частичную копию массива.


System.arraycopy(): Системный класс arraycopy() - лучший способ выполнить частичную копию массива. Это предоставляет вам простой способ указать общее количество элементов для копирования, а также позиции индекса исходного и целевого массива. Например, System.arraycopy(source, 3, destination, 2, 5) скопирует 5 элементов из источника в пункт назначения, начиная с 3-го индекса источника и заканчивая 2-м индексом назначения.


Arrays.copyOf(): Если вы хотите скопировать первые несколько элементов массива или полную копию массива, вы можете использовать этот метод. Очевидно, что он не такой универсальный, как System.arraycopy(), но он также не сбивает с толку и прост в использовании.


Arrays.copyOfRange(): если вы хотите скопировать несколько элементов массива, где начальный индекс не равен 0, вы можете использовать этот метод для копирования частичного массива.


java arrays