Mentre System.arraycopy
è implementato nativamente, ed è quindi potrebbe essere più veloce di un ciclo di Java, non è sempre veloce come ci si potrebbe aspettare. Considerate questo esempio:
Object[] foo = new Object[]{...};
String[] bar = new String[foo.length];
System.arraycopy(foo, 0, bar, 0, bar.length);
In questo caso, il tipo di base dei foo
e bar
array hanno diversi tipi di base, per cui la realizzazione di arraycopy
deve verificare il tipo di ogni riferimento copiato per assicurarsi che sia effettivamente un riferimento a un'istanza di String. Questo è significativamente più lento di un semplice memcopy in stile C dei contenuti dell'array.
L'altro punto è che Arrays.copyOf
utilizza System.arraycopy
sotto il cofano, quindi il risparmio che si ottiene creando un nuovo array e riempiendolo manualmente utilizzando arraycopy
sarebbe minimo. Supponendo che questo è ciò che stai cercando di fare ...
Il mio consiglio sarebbe quello di utilizzare la versione che rende il codice più facile da leggere, e solo preoccuparsi che uno è più veloce se profiling ti dice che è importante.
1 - E 'potrebbe essere più veloce, ma è anche possibile che il compilatore JIT fa un buon lavoro di ottimizzazione di un ciclo a mano il codice che non c'è differenza tale.
fonte
2010-04-07 04:15:53
ciò che è "Bloch"? Perché lo snippet di codice è pertinente? –
@Ciro Bloch è il tizio che ha scritto l'implementazione di ArrayList. – Insomniac
Vedere anche: https://stackoverflow.com/q/44487304/14955 – Thilo