Как скопировать массив?
Object.clone() и System.arraycopy(). Нативные способы копирования, самые быстрые из возможных. Унаследованный от базового класса clone() копирует весь массив без лишних аргументов. arraycopy() , наоборот, максимально гибкий – позволяет копировать часть массива и указывать массив, в который копировать.
Arrays.copyOf(), Arrays.copyOfRange() и все их перегрузки. Утилитарные методы, которые дают более специализированные способы копирования. Внутри все используют System.arraycopy() .
Копирование через стрим. Arrays.stream(sourceArray).toArray() . Удобно когда нужно встроить дополнительные промежуточные операции.
Сторонними библиотеками. Обычно обеспечивают дополнительные удобства, такие как проверка корректности параметров, приведения типов, и прочие. Пример – класс SerializationUtils из Apache Commons.
Все перечисленные способы создают поверхностную копию – оба массива в итоге ссылаются на одни и те же объекты. Лучший способ создать глубокую копию – реализовать ее вручную. Сначала оператором new создается пустой массив нужного размера, затем в цикле заполняется копиями элементов. Stream API здесь может дать удобный интерфейс реализации, и оптимизировать копирование с помощью многопоточности.
Самый быстрый, но ужасный по эффективности способ глубокого копирования массива без реализации копирования отдельных элементов – сериализация+десериализация. Сложно придумать оправдание такому плохому способу для продакшна, но этот метод вполне подходит для реализации быстрого прототипа, или для тестового кода.
Как скопировать один массив в другой java
Для копирования одного массива в другой в Java можно использовать метод System.arraycopy() или использовать цикл for для копирования каждого элемента в новый массив.
Пример использования System.arraycopy() :
int[] source = 1, 2, 3, 4, 5>; int[] destination = new int[source.length]; System.arraycopy(source, 0, destination, 0, source.length); System.out.println(Arrays.toString(destination )); // => [1, 2, 3, 4, 5]
Пример использования цикла for :
int[] source = 1, 2, 3, 4, 5>; int[] destination = new int[source.length]; for (int i = 0; i source.length; i++) destination[i] = source[i]; >
Java Dev Notes
Данный метод, после всех проверок, копирует length элементов массива src, начиная с позиции srcPos, в массив dest, начиная с позиции destPos. Его удобно использовать, когда нужно скопировать лишь часть массива. Пример использования:
String[] a = ;
String[] b = new String[5];
System.arraycopy(a,0,b,0,a.length);
for (int i=0; i System.out.println(b[i]);
На печать будет выведено следующее:
abc
def
ghs
null
null
КОПИРОВАНИЕ С ИСПОЛЬЗОВАНИЕМ МЕТОДА clone
По умолчанию, все массивы являются объектами, т.е. поддерживают методы класса java.lang.Object.
Массивы также наследуют интерфейсы java.lang.Cloneable, java.io.Serializable. Для массивов переопределен метод clone(), который проводит поэлементное копирование. Пример использования:
String[] a = ;
String[] b = (String[])a.clone();
a[0] = "changed";
for (int i=0; i System.out.println(b[i]);
На печать будет выведено следующее:
abc
def
ghs
КОПИРОВАНИЕ С ИСПОЛЬЗОВАНИЕМ Arrays.copyOf
Сигнатура метода Arrays.copyOf для чисел типа int имеет следующий вид:
public static int[] copyOf(int[] original,
int newLength)
Производится копирование массива original, возвращается массив длиной newLength. Если original.length
int[] a = ;
int[] b = Arrays.copyOf(a,5);
for (int i=0; i System.out.println(b[i]);
На печать будет выведено следующее:
1
2
3
0
0
КОПИРОВАНИЕ ВРУЧНУЮ в ЦИКЛЕ
int[] a = ;
int[] b = new int[a.length];
for (int i=0; i b[i] = a[i];
Скопируйте массив в другой тип среды выполнения в Java
В этом посте мы обсудим, как скопировать массив в другой тип среды выполнения в Java.
В Java существует несколько способов копирования массива в другой тип среды выполнения, что представляет собой процесс переноса элементов одного массива в другой массив совместимого типа данных. Некоторые из возможных методов:
1. Использование кастинга
Мы знаем, что массивы — это объекты в Java, но они представляют собой объект-контейнер, содержащий элементы одного типа. Следовательно, чтобы привести исходный массив T[] в целевой массив U[] , каждый член исходного массива должен быть приведен к типу U . Идея состоит в том, чтобы использовать цикл для перебора элементов исходного массива и приведения каждого элемента к целевому типу. Этот метод требует, чтобы мы знали типы обоих массивов и обрабатывали любые возможные исключения, которые могут возникнуть из-за несовместимых типов. Например, следующий код использует для цикла копировать и приводить каждый элемент Number массив в Integer array:
