Копирование массива по значению в java

Я попытался сделать независимую копию массива, но не смог получить его. см., что я не могу скопировать его целое целое с помощью цикла for из-за соображений эффективности. Есть ли другой путь? Это был мой код:

int[] temp = new int[arr.length]; 
temp = arr; 

Ответ 1

Посмотрите System.arraycopy(). Как,

int[] b = new int[a.length];
System.arraycopy(a, 0, b, 0, a.length);

Ответ 2

Arrays.copyOf() создает новую копию существующего массива (необязательно с другой длиной).

Ответ 3

Попробуйте использовать метод clone () для этой цели. Насколько я помню, это единственный случай, когда Джош Блох в Effective Java рекомендовал использовать клонирование.

int[] temp = arr.clone ();

Но arrayCopy намного быстрее. Пример теста производительности в массиве из 3 000 000 элементов:

System.arrayCopy time: 8ms
     arr.clone() time: 29ms
 Arrays.copyOf() time: 49ms
 simple for-loop time: 75ms

Ответ 4

Отъезд System.arraycopy(). Он может копировать массивы любого типа и является предпочтительным (и оптимизированным) способом копирования массивов.

Ответ 5

Вы можете использовать System.arraycopy, но я сомневаюсь, что это будет намного более эффективно. Память должна быть скопирована в любом случае, поэтому единственной возможностью оптимизации является копирование больших блоков памяти сразу. Но размер части памяти, скопированной сразу, сильно ограничен процессором/системной архитектурой.