Как скопировать массив
Короткий ответ
clone() или Arrays.copyOf() создают новый массив с теми же элементами:
void main() {
int[] original = {1, 2, 3};
int[] copy = original.clone();
copy[0] = 99;
IO.println(Arrays.toString(original));
IO.println(Arrays.toString(copy));
}Результат:
[1, 2, 3]
[99, 2, 3]Другой длины
Arrays.copyOf() позволяет сразу изменить длину — новые элементы заполняются нулями:
void main() {
int[] numbers = {1, 2, 3};
IO.println(Arrays.toString(Arrays.copyOf(numbers, 5)));
IO.println(Arrays.toString(Arrays.copyOf(numbers, 2)));
}Результат:
[1, 2, 3, 0, 0]
[1, 2]Часть массива
Arrays.copyOfRange() копирует элементы с индекса from до to (не включая):
void main() {
String[] days = {"Mon", "Tue", "Wed", "Thu", "Fri"};
IO.println(Arrays.toString(Arrays.copyOfRange(days, 1, 4)));
}Результат:
[Tue, Wed, Thu]В существующий массив
System.arraycopy() копирует часть одного массива в другой:
void main() {
int[] source = {1, 2, 3};
int[] target = new int[5];
System.arraycopy(source, 0, target, 2, 3);
IO.println(Arrays.toString(target));
}Результат:
[0, 0, 1, 2, 3]Частая ошибка
Присвоить массив другой переменной и считать это копией. Обе переменные указывают на один массив:
void main() {
int[] original = {1, 2, 3};
int[] notACopy = original;
notACopy[0] = 99;
IO.println(Arrays.toString(original));
}Результат:
[99, 2, 3]Учтите и другое: clone() копирует только сам массив. Если в нём лежат изменяемые объекты, копия ссылается на те же объекты.
Функции из этого ответа
- Arrays.copyOf() — Копирует массив в новый — той же или другой длины. Часть массива копирует copyOfRange().