Liste de tableaux de mes objets, indexOf problème
J'ai un problème avec Java à l'ArrayList. J'ai créé un Objet, qui contient deux attributs x et y de la. Maintenant, j'ai chargé un objet dans ma liste de tableaux. Le problème est que je ne sais pas comment trouver l'indice d'un objet x de l'attribut, je suis à la recherche. Est-il possible de faire cela?
OriginalL'auteur majtits | 2010-05-05
Vous devez vous connecter pour publier un commentaire.
En supposant que quelque chose comme:
Et une déclaration d':
Vous pouvez utiliser pour chaque itération à travers tous les points et de trouver celui que vous voulez:
Noter que ce ne sera pas vous donner la indice, mais il vous donnera la
Point
lui-même, ce qui est parfois assez. Si vous avez vraiment besoin de l'index, alors vous voulez les utiliser indexés pour la boucle, à l'aide desize()
etget(int index)
(voir BalusC de réponse).Voir aussi
java.util.List
APILa solution ci-dessus les recherches dans
O(N)
pour chaquetargetX
. Si vous ne le faites souvent, vous pouvez améliorer cela en déclarantclass Point implements
Comparable<Point>
, à l'aide dex
comme la principale clé de tri pourCollections.trier
.Alors vous pouvez
Collections.binarySearch
. Avec un temps de réglage deO(N log N)
, chaque requête peut maintenant être répondu dansO(log N)
.Une autre option est d'utiliser un
SortedSet
comme unTreeSet
, surtout si ce que vous avez est un<Point>
, pas un<Point>
.Voir aussi
ArrayList<Point>
ASC d'abord parx
ety
?oui, je viens de voir le
[indexOf]
tag; à propos de votre réponse, au lieu de duper.OriginalL'auteur polygenelubricants
Est-ce ce que vous recherchez?
}
}
Si vous voulez juste faire de la recherche sur la propriété x, changer la méthode equals de comparer seulement les valeurs de x comme:
OriginalL'auteur Suresh Kumar
Juste itérer sur la liste et tester chaque élément.
Verbeux, oui, mais peut-être jusqu'à ce que JDK7 avec Fermetures, il n'y a pas d'autre façon standard.
OriginalL'auteur BalusC
J'ai l'habitude de simplement utiliser une carte, si je veux être en mesure d'aller chercher un objet en dehors d'une collection basée sur une valeur d'attribut. Je trouve cela plus propre que d'avoir à effectuer une itération sur les listes.
maintenant, si je veux l'objet qui a une valeur x de "foo", il suffit de
si l'ordre est important, envisager une LinkedHashMap.
OriginalL'auteur rompetroll