У меня есть массив, 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]; }
но, похоже, это работает некорректно. Пожалуйста, не используйте сложные термины, такие как глубокое копирование и т.д., потому что я не знаю, что это значит.
int[] src = newint[]{1,2,3,4,5}; int[] dest = newint[5];
System.arraycopy( src, 0, dest, 0, src.length );
Но, вероятно, в большинстве случаев лучше использовать clone():
int[] src = ... int[] dest = src.clone();
Ответ 2
вы можете использовать
int[] a = newint[]{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[]. Вы можете увидеть это в байт-коде, что-то вроде этого:
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, вы можете использовать этот метод для копирования частичного массива.