Java: .contient et .est égal à
Je suis en train d'exécuter un programme, pour comparer des éléments dans les deux liste liée avec les uns des autres.
une façon, je peux faire c'est par l'exécution de deux boucles for et d'itération sur les listes de comparaison de chaque élément dans la liste 1 avec la liste 2 de l'utiliser .equals().
l'autre façon, c'est juste une itération sur la première liste et de vérifier si list1.contient(list1.get(i))
.. la documentation de java dit, que .contient n' .est égal à l'interne.
si c'est le cas, comment est-ce que mon temps de course pour l'ex est de plus quand par rapport à ce dernier?
Ai-je mal interpréter la documentation? Si je l'ai fait, comment fonctionne exactement la comparaison interne lieu lorsque j'utilise contient?
using equals:
for (int i = 0; i < list_one.size(); i++) {
for (int j = 0; j < list_one.size(); j++) {
if (list_one.get(i).equals(list_two.get(j))) { count++; }
using contains:
for (int i = 0; i < list_one.size(); i++) {
if (list_two.contains(list_one.get(i)) == true) { count++; }
Pas besoin d'utiliser de boucle pour vérifier si un élément est présent ou non dans la liste.
Je dois vérifier si tous les éléments de la première liste, est plutôt dans la deuxième liste. Fondamentalement, ramasser le chevauchement des éléments.
Merci de poster votre code.
OriginalL'auteur madCode | 2012-01-28
Vous devez vous connecter pour publier un commentaire.
La mise en œuvre de
contains
va arrêter l'itération d'une foisequals
renvoie true, afin de ne pas réitérer la liste entière si l'élément que vous recherchez est quelque part au début de la liste. Si votre version ne le fait pas, qui pourrait expliquer pourquoi il est plus lent.PS: de toute façon le temps d'exécution sera toujours quadratique. Il y a des moyens plus intelligents pour résoudre ce problème, qui n'impliquent pas d'itération dans la deuxième liste pour chaque élément de la première liste (par exemple en triant les deux listes de première ou à l'aide d'un ensemble).
OriginalL'auteur sepp2k
Je pense, de voir
get(i)
que vous utilisezget(j)
dans les deux boucles. Dans une liste, qui est inefficace.for (String s1 : list1) for (String s2 : list2) ...
doivent avoir la même vitesse quecontains
.Par exemple get(3) aurait besoin de commencer avec le premier élément, prendre le lien pour les trois prochaines fois. Alors que la for-each utilise un itérateur pointant sur l'élément suivant.
OriginalL'auteur Joop Eggen