Mientras System.arraycopy
se implementa de forma nativa, y por lo tanto es podría ser más rápido que un bucle de Java, que no siempre es tan rápido como se podría esperar. Considere este ejemplo:
Object[] foo = new Object[]{...};
String[] bar = new String[foo.length];
System.arraycopy(foo, 0, bar, 0, bar.length);
En este caso, el tipo de base de los foo
y bar
matrices tienen diferentes tipos de bases, por lo que la implementación de arraycopy
tiene que comprobar el tipo de cada referencia copiado para asegurarse de que en realidad es una referencia a una instancia de cadena. Eso es significativamente más lento que una simple memcopy de estilo C del contenido de la matriz.
El otro punto es que Arrays.copyOf
utiliza System.arraycopy
bajo el capó, por lo que el ahorro a alcanzar mediante la creación de una nueva matriz y llenar por sí mismo utilizando arraycopy
sería mínimo. Suponiendo que eso es lo que tratamos de hacer ...
Mi consejo sería utilizar la versión que hace el código más fácil de leer, y sólo preocuparse de cuál es más rápido si perfiles le dice que es importante.
1 - Se podría ser más rápido, pero es también es posible que el compilador JIT hace un buen trabajo de optimización de un lazo de mano de código que no hay ninguna diferencia.
¿Qué es "Bloch"? ¿Por qué es relevante el fragmento de código? –
@Ciro Bloch es el tipo que escribió la implementación de ArrayList. – Insomniac
Vea también: https://stackoverflow.com/q/44487304/14955 – Thilo