8
votes

pour (objet objet: liste) [Java] et élément d'index

Y a-t-il un moyen d'obtenir un identifiant d'élément d'une liste pour l'obtenir ultérieurement via list.get (index) code>

lorsque vous utilisez P>

for(Object obj: o)


0 commentaires

4 Réponses :


10
votes

Non, pour chacune de la boucle ne garde pas la trace de l'index. Vous pouvez utiliser une boucle indexée régulière ou faire quelque chose comme ceci: xxx

ceci est risqué car pause / Continuer Code> IDX sort de la synchronisation, alors utilisez-le rarement, et seulement lorsque le corps est simple et que quelques lignes longues et seulement quelques lignes longues.

Si les éléments sont distincts, list.indexof fonctionnerait également, bien que sur O (n) , et à ce stade, vous pouvez envisager un définir (non ordonné, mais garanti distinct).


Il convient également de dire que parfois à l'aide d'un lisiterator () atténue également la nécessité d'un index explicite tout en itération.

A lisiterator prend en charge ajouter , définir et supprimer des opérations .

C'est un autre avantage clair Âge Liste a sur des tableaux en ce qui concerne le mécanisme d'itération.


0 commentaires

2
votes

Cette question n'est pas très bien libellée, mais d'après ce que je peux vous dire, vous souhaitez trouver la position d'un objet spécifique dans une liste , et puis récupérez-le plus tard via cet index?

Tout d'abord, si vous connaissez l'objet , vous recherchez alors vous ne devez pas avoir à le trouver dans la liste , puisque vous l'avez déjà.

Cela dit, vous pouvez facilement faire quelque chose comme ceci: xxx

mais je prendrais un deuxième regard sur votre Application pour déterminer si c'est vraiment quelque chose qui est nécessaire pour vous de faire.


1 commentaires

J'ai simplement besoin d'enregistrer une position dans la liste dans le champ de chaque objet. O.SeposInlist (courantIndexoftheloop)



5
votes

La réponse simple est n °

Le meilleur que je peux penser consiste à combiner l'itération et l'indexation comme suit: xxx

Cette approche présente l'avantage que pause et continuer ne gâche pas les calculs iDX .

d'autre part, si la liste < / code> est un arraylist et que vous souhaitez garder une trace de l'index, vous êtes probablement mieux en utilisant une variation de xxx


0 commentaires

2
votes

Vous devez utiliser: xxx

La documentation est ici

@eugene Je vois que vous avez mentionné dans un commentaire à une autre réponse que vous envisagez de stocker le Index d'un objet (avec dans l'objet en question?), ce n'est probablement pas une bonne idée, soyez très prudent car un indice d'objets peut changer.


4 commentaires

ma réponse est cependant raisonnable. Et plus important encore, fournit un lien pour mieux éduqué lui-même et d'autres. Si quelqu'un avec le représentant peut modifier la question plus sensible que ce serait génial.


Justin, j'allais descendre votre réponse, mais je ne ferais pas :-) - mais c'est la solution pire possible à ce problème, principalement parce que si vous conservez une variable d'index, le temps nécessaire pour calculer la position dans l'index serait être O (1), juste le temps nécessaire pour incrémenter la variable. Avec votre approche, le temps est O (n), où "n" est la position de l'élément de la liste.


Il renvoie également la première occurrence, donc si vous avez des duplicats dans la liste, il retournera toujours l'index du premier objet qui est égal à le paramètre.


@Ravi, bien sûr, mais l'OP a demandé une manière "plus simple" de le faire, il est déjà au courant de l'incrémentation d'une variable.