Как скопировать массив в Java

В Java массивы нельзя копировать с помощью оператора = , поскольку операция присваивания приведет к тому, что обе переменные будут указывать на тот же массив.

Однако Java позволяет нам копировать содержимое массива различными другими методами.

Object.clone

Копирование массива — одна из немногих ситуаций, когда Object.clone — хороший выбор:

 импортировать java.  util. *; class ArrayCopy {public static void main (String args []) {int [] original = {10, 20, 30};  int [] копия = оригинал.clone ();  System.out.println ("Оригинал:" + Arrays.toString (исходный));  System.out.println ("Копия:" + Arrays.toString (копия));  }} 

Это работает для массивов объектов, но обратите внимание, что он создает неглубокую копию ; т.е. объекты не копируются, только ссылки. См. «Неглубокая и глубокая копия». Если вам нужно сделать глубокую копию, вы должны создать конструктор копии или прибегнуть к Object.clone (но сначала прочтите это).

Вот несколько альтернативных способов сделать мелкую копию…

System.arraycopy

Метод System.arraycopy можно использовать для копирования массива или подмассив:

 import java.util. *; class ArrayCopy {public static void main (String args []) {int [] original = {10, 20, 30};  int [] copy = new int [original.length];  System.arraycopy (оригинал, 0, копия, 0, длина оригинала);  System.out.println ("Оригинал:" + Arrays.toString (исходный));  System.out.println ("Копия:" + Arrays.toString (копия));  }} 

Arrays.copy код>

 import java.util. *; class ArrayCopy {public static void main (String args []) {int [] original = {10, 20, 30};  int [] copy = Arrays.copyOf (оригинал, оригинал. длина);  System.out.println ("Оригинал:" + Arrays.toString (исходный));  System.out.println ("Копия:" + Arrays.toString (копия));  }} 

Commons Lang

В Apache Commons Lang для копирования массива можно использовать метод ArrayUtils.clone :

  int [] copy = ArrayUtils.  clone (original);  

Stream API

Функциональность копирования также присутствует в Stream API:

  int [] copy = IntStream.of (original) .toArray ();//Или для ссылочных типовString [] strs = Stream.of (original) .toArray (String [] :: new); код> 

Оцените статью
nanomode.ru
Добавить комментарий