Copie d'une collection dans un tableau
Bonjour,
Lorsqu'on veut copier le contenu d'une liste (un java.util.ArrayList dans mon cas) dans un tableau, on peut utiliser la méthode "toArray", par exemple :
Code:
list.toArray( array )
J'ai pu constater que le toArray est beaucoup plus rapide à l'exécution (jusqu'à 10 fois plus rapide d'après mes tests) que d'utiliser une itération comme ceci:
Code:
1 2 3
| int index = 0;
for ( T element : list )
array[index++] = element; |
Mais maintenant, j'ai besoin de copier le contenu de la liste à un index dans le tableau qui n'est pas 0. C'est-à-dire que je veux faire ceci:
Code:
1 2 3
| int index = startIndex;
for ( T element : list )
array[index++] = element; |
Depuis que j'ai constaté que le toArray est 10 fois plus rapide qu'une simple itération, je cherche comment je peux accélérer ce dernier cas !
Des idées ?
Exemple de programme de test
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
|
package perf;
import java.util.ArrayList;
import java.util.List;
public class PerfToArray
{
private static int repeat = 10000;
private static int nbOfString = 10000;
private static List<String> list = new ArrayList<String>( nbOfString );
private static String[] array = new String[nbOfString];
public static void main( String[] args )
{
for ( int i = 0; i < nbOfString; i++ )
list.add( String.valueOf(i) );
long time_1 = copy1( repeat, list, array );
System.out.println( "Copie avec toArray = "+ time_1 +" ms" );
long time_2 = copy2( repeat, list, array );
System.out.println( "Copie avec Iterator = "+ time_2 +" ms" );
}
private static <T> long copy1( int repeat, List<T> list, T[] array )
{
long start = System.currentTimeMillis();
while ( repeat-- > 0 )
list.toArray( array );
long stop = System.currentTimeMillis();
return stop-start;
}
private static <T> long copy2( int repeat, List<T> list, T[] array )
{
long start = System.currentTimeMillis();
while ( repeat-- > 0 )
{
int index = 0;
for ( T element : list )
array[index++] = element;
}
long stop = System.currentTimeMillis();
return stop-start;
}
} |
C:\hlb\Java>java -version
java version "1.6.0_24"
Java(TM) SE Runtime Environment (build 1.6.0_24-b07)
Java HotSpot(TM) Client VM (build 19.1-b02, mixed mode, sharing)
C:\hlb\Java>java perf.PerfToArray
Copie avec toArray = 437 ms
Copie avec Iterator = 4375 ms
C:\hlb\Java>