Est-il un moyen d'obtenir un id d'élément de la liste pour obtenir ultérieurement par list.get(index)
lors de l'utilisation de
for(Object obj: o)
construction
Seulement de définir un local var et manuellement l'incrémentation?
Rien de plus simple?
Vous avez répondu.
OriginalL'auteur EugeneP | 2010-05-18
Non,
for-each
boucle permet de ne pas garder la trace de l'indice. Vous pouvez soit utiliser régulièrement indexé boucle, ou de faire quelque chose comme ceci:C'est risqué depuis
break
/continue
feraidx
va de synchronisation, afin de ne utiliser ce rarement, et seulement lorsque le corps est simple et en seulement quelques lignes.Si les éléments sont distincts,
Liste.indexOf
également de travailler, mais àO(N)
, et à ce stade, vous souhaitez mai à envisager uneSet
(non ordonnée, mais d'une garantie distincte).Il faut dire aussi que parfois l'aide d'un
listIterator()
également réduit la nécessité d'un index explicite lors de l'itération.Un
ListIterator
prend en chargeadd
,set
etremove
opérations.C'est un autre avantage évident
List
a plus de tableaux d'autant que itération mécanisme de va.OriginalL'auteur polygenelubricants
La réponse simple est Non.
Du mieux que je peux penser à est de combiner l'itération et l'indexation comme suit:
Cette approche a l'avantage de
break
etcontinue
de ne pas gâcher laidx
calculs.D'autre part, si le
list
est unArrayList
et vous souhaitez garder une trace de l'indice, vous êtes probablement mieux de tout simplement en utilisant une variation deOriginalL'auteur Stephen C
Cette question n'est pas formulée très bien, mais de ce que je peux vous dire aimerais trouver la position d'un spécifique
Object
dans unList<Object>
, puis de la récupérer plus tard par le biais de l'index?Tout d'abord, si vous connaissez le
Object
que vous cherchez, alors vous ne devriez pas besoin d'avoir à trouver dans leList
, puisque vous l'avez déjà.Cela dit, vous pourriez facilement faire quelque chose comme ceci:
Mais je voudrais prendre un deuxième coup d'oeil à votre demande pour déterminer si c'est vraiment quelque chose qui est nécessaire pour vous de faire.
Puis le comptage est probablement la meilleure façon...
OriginalL'auteur danben
Vous devez utiliser:
La documentation est ici
@Eugene je vois que vous mentionnez dans un commentaire à une autre réponse que vous envisagez de stocker l'index d'un objet (avec dans l'objet en question?), ce n'est probablement pas une bonne idée, être très prudent car un des objets de l'indice peut changer.
ma réponse est cependant sensible. et surtout fournit un lien pour mieux éduqué lui-même et les autres. si quelqu'un avec la rep peut modifier la question plus sensible, ce serait super.
Justin, j'allais downvote votre réponse, mais je ne le ferai pas 🙂 - Mais c'est la pire solution possible à ce problème, principalement parce que si vous maintenez un indice variable, le temps nécessaire pour calculer la position dans l'indice serait O(1), juste le temps nécessaire pour incrémenter la variable. Avec votre approche, le temps est en O(n), où "n" est la position de l'élément dans la liste.
Aussi il renvoie la première occurrence, donc si vous avez des doublons dans la liste, il sera toujours revenir à l'index du premier objet qui correspond au paramètre.
bien sûr, mais l'OP demandé pour un "simple" moyen de le faire, il est déjà au courant de l'incrémentation d'une variable.
OriginalL'auteur Justin