Java: Obtenir le premier élément d'une collection
Si j'ai une collection, tels que Collection<String> strs
, comment puis-je obtenir le premier élément? Je pourrais vous suffit d'appeler un Iterator
, de prendre sa première next()
, puis jeter le Iterator
loin. Est-il moins de gaspillage que faire?
- Bien sûr, il peut y avoir une meilleure façon d'accéder au premier élément si vous connaissez la mise en œuvre de conteneur de classe...
- Généralisation pour tout index: stackoverflow.com/questions/1047957/...
- Cela sonne comme vous avez besoin de la File d'attente.peek()
Vous devez vous connecter pour publier un commentaire.
Iterables.get(yourC, indexYouWant)
Parce que vraiment, si vous êtes à l'aide de Collections, vous devriez être en utilisant Google Collections.
Dirait que ce est la meilleure façon de le faire:
Grande question... Au premier abord, il semble comme une surveillance de la
Collection
interface.Noter 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 préservé.Bien qu'il puisse sembler un peu inutile, il pourrait ne pas être aussi mauvais que vous le pensez. Le
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 permet d'instancier laIterator
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 la
ArrayList<String>.iterator()
méthode, nous voyons que c'estArrayList::Itr
. C'est une classe interne qui vient de accède aux éléments de la liste directement, plutôt que de les copier.Juste assurez-vous de vérifier le retour de
iterator()
car il peut être vide ounull
en fonction de la mise en œuvre.Dans java 8:
Pour les anciennes versions de java, il y a une méthode getFirst dans la Goyave Iterables:
getFirst
méthode disponible. Il y aget
etgetLast
méthodesIl n'existe pas une chose telle que la "première" d'un élément dans une
Collection
parce qu'il est .. bien tout simplement une collection.De la Java doc de Collection.iterator() méthode:
De sorte que vous ne pouvez pas.
Si vous utilisez un autre interface comme Liste, vous pouvez effectuer les opérations suivantes:
Mais directement à partir d'une Collection, ce n'est pas possible.
get(int n)
est défini pourCollection
n
e point deIterable
est facilement bien définis. Lorsque vous travaillez avec unList
, vous avez d'autres garanties que le fonctionnement est stable (et peut souvent être réalisée en O(1)), mais on ne change pas la définition de lan
ème élément d'uneIterable
.Il semble que votre Collection veut être sous forme de Liste, de sorte que je vous suggère:
Dans Java 8, vous avez beaucoup d'opérateurs à l'utilisation, par exemple limite
Goyave fournit une
onlyElement
Collector
, mais à n'utiliser que si vous vous attendez à la collecte d'avoir exactement un élément.Si vous n'êtes pas sûr de combien d'éléments il y a, à l'utilisation
findFirst
.Vous pouvez faire un casting. Par exemple, si il existe une méthode avec cette définition, et vous savez que cette méthode retourne une Liste:
Et après l'invoquer, vous avez besoin de le premier élément, vous pouvez le faire comme ceci:
Si vous savez que la collection est une file d'attente puis vous pouvez lancer la collecte d'une file d'attente et obtenir facilement.
Il y a plusieurs structures que vous pouvez utiliser pour obtenir l'ordre, mais vous aurez besoin de jeter à elle.
Totalement dépend de la mise en œuvre que vous avez utilisé, si arraylist, linkedlist, ou d'autres implémentations de jeu.
si elle est définie, alors vous pouvez obtenir directement le premier élément , de leurs peuvent être truc en boucle sur la collection , créez une variable de valeur 1 et d'obtenir la valeur lorsque la valeur de l'indicateur est de 1 après la rupture que boucle.
si c'est la liste de mise en œuvre, alors il est facile de définir le numéro d'index.
Vous pourriez faire ceci:
La javadoc de la Collection donne de la mise en garde suivante wrt l'ordre des éléments du tableau: