Хотя System.arraycopy
реализована изначально, и, следовательно, может быть быстрее, чем цикл Java, это не всегда так быстро, как вы могли бы ожидать. Рассмотрим следующий пример:
Object[] foo = new Object[]{...};
String[] bar = new String[foo.length];
System.arraycopy(foo, 0, bar, 0, bar.length);
В этом случае базовый тип foo
и bar
массивы имеют различные базовые типы, поэтому реализация arraycopy
должен проверить тип каждой ссылки скопировали, чтобы убедиться, что это на самом деле ссылка на экземпляр String. Это значительно медленнее, чем простая mem-копия содержимого массива C-стиля.
Другое дело, что Arrays.copyOf
использует System.arraycopy
под капотом, так что экономия вы достичь путем создания нового массива и заполнения его самостоятельно, используя arraycopy
будет минимальным. Предполагая, что это то, что вы пытаетесь сделать ...
Моей рекомендацией было бы использовать версию, которая сделает ваш код более легким для чтения, и только беспокоиться о том, какой из них быстрее, если профилирование говорит вам, что это имеет значение.
1 - Это может быть быстрее, но это также возможно, что JIT компилятор делает такую хорошую работу по оптимизации цикла вручную кода, что нет никакой разницы.
Что такое "Блох"? Почему это относится к фрагменту кода? –
@ Циро Блох - это парень, который написал реализацию ArrayList. – Insomniac
См. Также: https://stackoverflow.com/q/44487304/14955 – Thilo