J'ai deux objets LinkedList toujours de la même taille. Je veux les comparer pour voir s'ils sont identiques au contenu. Quelles sont les conséquences générales de performance et de style de la création d'un lititerator pour chaque liste et de l'utilisation d'un moment HASNEXT en boucle par rapport à un compteur (int i) et d'itération de 0 à LinkedList.Size () à l'aide de LinkedList.get (i) pour obtenir et comparer les valeurs? Y a-t-il une meilleure façon de voir? P>
La seule chose à laquelle je peux penser, c'est que la méthode Lisiterator peut être meilleure en ce sens que je pourrais plus facilement échanger dans une autre liste comparable plus tard (pas que je planifie dessus). Je ne sais pas à quoi ressemblent les deux sous le capot, alors je ne suis pas sûr de la façon dont je voudrais leur comparer la performance-sage. P>
3 Réponses :
Comme il s'avère donc ne réinventez pas la roue. P> une dernière note: N'utilisez pas abstracttractlist.equals () code> (quel
lingedlist code> utilise) le fera automatiquement afin d'utiliser cela. Le code est:
Obtenir (index) code> à itérer sur un
linkedlist code>. C'est o (n) accès (O (1) pour un code> arraylist code>) de sorte qu'un
linkedlist code> Traversal à l'aide de
obtenez (index) code> sera O (n 2 sup>). p> p>
Merci. C'est semblable à ce que j'utilise.
Ne serait-il pas préférable de retourner de faux tout de suite, lorsque les deux listes sont de taille différente, au lieu de votre dernier retour conditionnel?
Ouais, je pense qu'un contrôle rapide sur les tailles serait une bonne idée de prévenir itérant à travers des listes de tailles différentes en premier lieu. Bonne prise.
accès aléatoire dans un linkedlist code> a des performances horribles (il doit commencer à une extrémité et invoquer
suivant code> ou similaire à plusieurs reprises), donc le
lisiterator (code) code > serait plus rapide. P>
Merci, cela a un sens complet. J'ai également juste compris que j'ai négligé la possibilité d'utiliser List1.equals (List2), qui, selon l'API, devraient avoir le comportement attendu (et je suppose qu'ils l'ont mis en œuvre avec des itérateurs).
Cette implémentation reçoit d'abord un itérateur de liste pointant vers l'élément indexé (avec Généralement, vous ne voulez pas faire un accès aléatoire sur des collections qui ne mettent pas en œuvre l'interface de marqueur En règle générale, une mise en œuvre de la liste doit mettre en œuvre cette interface si, pour des instances typiques de la classe, cette boucle: p>
obtenez (n) code> pour les listes liées n'est pas une opération constante pour les classes qui étendent
abstractentiallist code>; C'est
O (n) code>. De abstraitentielleList # Obtenir (int Index) :
lisiterator (index) code>). Ensuite, il obtient l'élément utilisant
lisiteratorator.next code> et le renvoie. P>
blockQuote>
java.util.randomAccess code>
. P>
for (Iterator i=list.iterator(); i.hasNext(); )
i.next();