web-dev-qa-db-fra.com

Le moyen le plus rapide d’obtenir les n premiers éléments d’une liste dans un tableau

Quel est le moyen le plus rapide d’obtenir les n premiers éléments d’une liste stockée dans un tableau?

Considérant cela comme le scénario:

int n = 10;
ArrayList<String> in = new ArrayList<>();
for(int i = 0; i < (n+10); i++)
  in.add("foobar");

Option 1:

String[] out = new String[n];
for(int i = 0; i< n; i++)
    out[i]=in.get(i);

Option 2:

String[] out = (String[]) (in.subList(0, n)).toArray();

Option 3: Y a-t-il un moyen plus rapide? Peut-être avec Java8-streams?

31
Joel

Option 1 plus rapide que l'option 2

Parce que l'option 2 crée une nouvelle référence List, puis crée un tableau d'éléments n à partir de List (l'option 1 redimensionne parfaitement le tableau en sortie). Cependant, vous devez d’abord résoudre le problème par un seul bogue. Utilisation < (ne pas <=). Comme,

String[] out = new String[n];
for(int i = 0; i < n; i++) {
    out[i] = in.get(i);
}
8
Elliott Frisch

Supposition:

liste - Liste <String>

Utilisation de Java 8 Streams,

  • pour obtenir les premiers N éléments d'une liste dans une liste,

    List<String> firstNElementsList = list.stream().limit(n).collect(Collectors.toList());

  • pour obtenir les premiers N éléments d'une liste dans un tableau,

    String[] firstNElementsArray = list.stream().limit(n).collect(Collectors.toList()).toArray(new String[n]);

38
src3369

Cela dépend principalement de la taille de n.

Si n==0, Rien ne vaut l'option n ° 1 :)

Si n est très grand, toArray(new String[n]) est plus rapide.

3
ZhongYu