J'ai deux listes (pas des listes java, vous pouvez dire deux colonnes)
Par exemple
**List 1** **Lists 2**
milan hafil
dingo iga
iga dingo
elpha binga
hafil mike
meat dingo
milan
elpha
meat
iga
neeta.peeta
J'aimerais une méthode qui renvoie le nombre d'éléments identiques. Pour cet exemple, il devrait être 3 et il devrait me renvoyer des valeurs similaires de liste et de valeurs différentes également.
Dois-je utiliser hashmap si oui, quelle méthode pour obtenir mon résultat?
Veuillez aider
PS: Ce n'est pas une mission scolaire :) Donc si vous me guidez, cela suffira
java
list
comparison
hashmap
user238384
la source
la source
Réponses:
ÉDITER
Voici deux versions. Une utilisation
ArrayList
et une autre utilisationHashSet
Comparez-les et créez votre propre version à partir de là, jusqu'à ce que vous obteniez ce dont vous avez besoin.
Cela devrait suffire à couvrir:
une partie de votre question.
continuer avec la réponse originale:
Vous pouvez utiliser un
java.util.Collection
et / oujava.util.ArrayList
pour cela.La méthode retentionAll effectue les opérations suivantes:
voir cet exemple:
ÉDITER
Pour la deuxième partie (valeurs similaires), vous pouvez utiliser la méthode removeAll :
Cette deuxième version vous donne également les valeurs similaires et gère les répétitions (en les supprimant).
Cette fois, le
Collection
pourrait être unSet
au lieu d'unList
(la différence est que l'ensemble ne permet pas de valeurs répétées)Production:
S'il ne fait pas exactement ce dont vous avez besoin, cela vous donne un bon départ afin que vous puissiez gérer à partir d'ici.
Question pour le lecteur: Comment incluriez-vous toutes les valeurs répétées?
la source
listOne
, mais +1 quand même!Vous pouvez essayer
intersection()
et dessubtract()
méthodes à partir deCollectionUtils
.intersection()
method vous donne une collection contenant des éléments communs et lasubtract()
méthode vous donne tous les éléments peu communs.Ils devraient également prendre soin d'éléments similaires
la source
S'agit-il vraiment de listes (ordonnées, avec doublons), ou sont-elles des ensembles (non ordonnés, pas de doublons)?
Parce que si c'est le dernier, alors vous pouvez utiliser, disons, a
java.util.HashSet<E>
et le faire dans le temps linéaire prévu en utilisant le pratiqueretainAll
.la source
Utilisation de java 8 removeIf
la source
Si vous recherchez un moyen pratique de tester l'égalité de deux collections, vous pouvez utiliser
org.apache.commons.collections.CollectionUtils.isEqualCollection
, qui compare deux collections indépendamment de l'ordre.la source
De toutes les approches, je trouve que l'utilisation
org.apache.commons.collections.CollectionUtils#isEqualCollection
est la meilleure. Voici les raisons -S'il n'est pas possible d'avoir
apache.commons.collections
une dépendance, je recommanderais d'implémenter l'algorithme qu'il suit pour vérifier l'égalité de la liste en raison de son efficacité.la source
Solution simple: -
Production :-
la source
En supposant
hash1
ethash2
la source
J'ai trouvé un exemple très basique de comparaison de listes à List Compare Cet exemple vérifie d'abord la taille, puis vérifie la disponibilité de l'élément particulier d'une liste dans une autre.
la source
la source
? true :false
nécessaire dans votre extrait de code?