Ответ 1
Посмотрите System.arraycopy()
. Как,
int[] b = new int[a.length];
System.arraycopy(a, 0, b, 0, a.length);
Я попытался сделать независимую копию массива, но не смог получить его. см., что я не могу скопировать его целое целое с помощью цикла for из-за соображений эффективности. Есть ли другой путь? Это был мой код:
int[] temp = new int[arr.length];
temp = arr;
Посмотрите System.arraycopy()
. Как,
int[] b = new int[a.length];
System.arraycopy(a, 0, b, 0, a.length);
Arrays.copyOf()
создает новую копию существующего массива (необязательно с другой длиной).
Попробуйте использовать метод 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
Отъезд System.arraycopy(). Он может копировать массивы любого типа и является предпочтительным (и оптимизированным) способом копирования массивов.
Вы можете использовать System.arraycopy, но я сомневаюсь, что это будет намного более эффективно. Память должна быть скопирована в любом случае, поэтому единственной возможностью оптимизации является копирование больших блоков памяти сразу. Но размер части памяти, скопированной сразу, сильно ограничен процессором/системной архитектурой.