Le moyen le plus rapide pour obtenir les n premiers éléments d'une Liste dans un Tableau
Quel est le moyen le plus rapide pour 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:
Est-il un moyen plus rapide? Peut-être avec Java8-flux?
J'attends qu'il varie selon la plate-forme et de la JVM, vous devriez essayer d'analyse comparative elle-même.
Pourquoi devrait-il depent de la jvm? Comment pourrais-je calculer la Complexité?
La complexité est facile. C'est
les deux sont fondamentalement faites la même chose, si vous regardez le code source pour
Pourquoi devrait-il depent de la jvm? Comment pourrais-je calculer la Complexité?
La complexité est facile. C'est
O(n)
. Le rendement réel peut varier.les deux sont fondamentalement faites la même chose, si vous regardez le code source pour
subList
et toArray
OriginalL'auteur Joel | 2015-07-09
Vous devez vous connecter pour publier un commentaire.
Option 1 Plus Rapide Que L'Option 2
Parce que l'Option 2 crée une nouvelle
List
de référence, puis crée unn
élément de tableau à partir de laList
(option 1 parfaitement les tailles du tableau de sortie). Cependant, vous devez d'abord fixer le par un bug. Utilisation<
(pas<=
). Comme,subList
ne se copie pas. C'est un point de vue sur la liste existante.Sauf que la vue est un no-op, je m'attends à de l'option 1 pour être plus rapide tout de même.
la création de la vue est essentiellement la création d'un objet avec un peu de variables. Pas de boucle, pas de copie, pas beaucoup, vraiment.
Le
toArray
est un peu plus compliqué.et aussi plus de sécurité, lié vérifications (comme si
n >= in.size()
, ou si quelqu'un modifie la Liste en le temps de le dire).OriginalL'auteur Elliott Frisch
Hypothèse:
liste - Liste
<String>
À L'Aide De Java 8 Ruisseaux,
pour obtenir des N premiers éléments d'une liste dans une liste,
List<String> firstNElementsList = list.stream().limit(n).collect(Collectors.toList());
pour obtenir des N premiers éléments d'une liste dans un Tableau,
String[] firstNElementsArray = list.stream().limit(n).collect(Collectors.toList()).toArray(new String[n]);
Si j'ai seulement 1 élément, et je le streaming façon, je reçois 1 élément et la valeur null
OriginalL'auteur src3369
Il dépend essentiellement de la façon dont grand
n
est.Si
n==0
, rien ne vaut l'option#1 🙂Si n est très grand,
toArray(new String[n])
est plus rapide.in
-Liste est environ le double de la tailletrès assurez vous que l'option#1.
OriginalL'auteur ZhongYu
Utilisation:
Les tableaux de.copyOf(yourArray,n);
OriginalL'auteur user2280949
- Je utiliser le moyen intégré:
C'est aussi un moyen plus rapide. Je n'ai pas testé celui-ci, mais suppose que c'est plus rapide que la lecture en boucle d'un tableau ou de la conversion des objets.
Eh bien, l'OP peut-valeur de la connaissance, mais si vous présentez une réponse de ce genre, vous devriez au moins expliquer pourquoi vous êtes en donner. Comme il est, c'est juste pas la réponse à la question.
OriginalL'auteur AXE