Si j'ai une collection, telle que Collection<String> strs
, comment puis-je sortir le premier article? Je pourrais simplement appeler un Iterator
, prendre son premier next()
, puis jeter le Iterator
. Y a-t-il un moyen moins coûteux de le faire?
Réponses
Trop de publicités?Regarde comme c'est la meilleure façon de le faire:
String first = strs.iterator().next();
Grande question... Au premier abord, il semble comme une surveillance de l' Collection
interface.
Notez que le "premier" ne permet pas toujours de retour, la première chose que vous mettez dans la collection, et ne peut faire sens pour les collections ordonnées. Peut-être que c'est pourquoi il n'y a pas un get(item)
appel, puisque l'ordre n'est pas nécessairement perserved.
Bien qu'il puisse sembler un peu inutile, il pourrait ne pas être aussi mauvais que vous le pensez. L' Iterator
vraiment juste contient des informations d'indexation dans la collection, généralement, une copie de l'intégralité de la collection. L'invocation de cette méthode ne instancier l' Iterator
objet, mais c'est vraiment le seul généraux (pas comme la copie de tous les éléments).
Par exemple, en examinant le type retourné par l' ArrayList<String>.iterator()
méthode, nous voyons que c'est - ArrayList::Itr
. C'est une classe interne qui vient de accède aux éléments de la liste directement, plutôt que de les copier.
Iterables.get (yourC, indexYouWant)
Parce que vraiment, si vous utilisez des collections, vous devriez utiliser Google Collections.
Il existe une méthode getFirst à Goyave Iterables :
Iterables.getFirst(iterable, defaultValue)
Il n'existe pas une chose telle que la "première" d'un élément dans une Collection
parce que c'est .. bien tout simplement une collection.
De la Java doc de la Collection.iterator() méthode:
Il n'existe aucune garantie quant à l'ordre dans lequel les éléments sont retournés...
Donc vous ne pouvez pas.
Si vous utilisez une autre interface comme la Liste, vous pouvez effectuer les opérations suivantes:
String first = strs.get(0);
Mais directement à partir d'une Collection, ce n'est pas possible.
Dans les collections GS :
Iterate.getFirst(iterable)
Cette méthode déterminera la meilleure méthode pour obtenir le premier élément en fonction du type de collection.