Ich habe zwei Listen (keine Java-Listen, man kann zwei Spalten sagen)
Beispielsweise
**List 1** **Lists 2**
milan hafil
dingo iga
iga dingo
elpha binga
hafil mike
meat dingo
milan
elpha
meat
iga
neeta.peeta
Ich möchte eine Methode, die zurückgibt, wie viele Elemente gleich sind. In diesem Beispiel sollte es 3 sein und mir ähnliche Werte sowohl für die Liste als auch für unterschiedliche Werte zurückgeben.
Sollte ich eine Hashmap verwenden, wenn ja, welche Methode, um mein Ergebnis zu erhalten?
Bitte helfen Sie
PS: Es ist keine Schulaufgabe :) Wenn du mich also nur führst, wird es ausreichen
java
list
comparison
hashmap
user238384
quelle
quelle
Antworten:
BEARBEITEN
Hier sind zwei Versionen. Eine Verwendung
ArrayList
und eine andere VerwendungHashSet
Vergleichen Sie sie und erstellen Sie daraus Ihre eigene Version, bis Sie das bekommen, was Sie brauchen.
Dies sollte ausreichen, um Folgendes abzudecken:
Teil Ihrer Frage.
Fortsetzung der ursprünglichen Antwort:
Sie können ein
java.util.Collection
und / oder verwendenjava.util.ArrayList
dafür verwenden.Die RetainAll- Methode führt Folgendes aus:
siehe dieses Beispiel:
BEARBEITEN
Für den zweiten Teil (ähnliche Werte) können Sie die removeAll- Methode verwenden:
Diese zweite Version gibt Ihnen auch die ähnlichen Werte und Handles wiederholt (indem Sie sie verwerfen).
Diesmal
Collection
könnte das einSet
statt eines seinList
(der Unterschied ist, dass das Set keine wiederholten Werte zulässt)Ausgabe:
Wenn es nicht genau das tut, was Sie brauchen, haben Sie einen guten Start, damit Sie von hier aus damit umgehen können.
Frage an den Leser: Wie würden Sie alle wiederholten Werte einbeziehen?
quelle
listOne
ändern können, aber trotzdem +1!Sie können versuchen
intersection()
undsubtract()
Methoden ausCollectionUtils
.intersection()
Methode gibt Ihnen eine Sammlung mit gemeinsamen Elementen und dersubtract()
Methode gibt Ihnen alle ungewöhnlichen.Sie sollten sich auch um ähnliche Elemente kümmern
quelle
Sind das wirklich Listen (geordnet, mit Duplikaten) oder sind sie Mengen (ungeordnet, keine Duplikate)?
Denn wenn es das letztere ist, können Sie beispielsweise a verwenden
java.util.HashSet<E>
und dies in der erwarteten linearen Zeit mit dem praktischen tunretainAll
.quelle
Verwenden von Java 8 removeIf
quelle
Wenn Sie nach einer praktischen Möglichkeit suchen, die Gleichheit zweier Sammlungen zu testen, können Sie diese verwenden
org.apache.commons.collections.CollectionUtils.isEqualCollection
, um zwei Sammlungen unabhängig von der Reihenfolge zu vergleichen.quelle
Von allen Ansätzen finde ich, dass
org.apache.commons.collections.CollectionUtils#isEqualCollection
der beste Ansatz ist. Hier sind die Gründe -Wenn es nicht möglich ist,
apache.commons.collections
eine Abhängigkeit zu haben , würde ich empfehlen, den folgenden Algorithmus zu implementieren, um die Gleichheit der Liste aufgrund ihrer Effizienz zu überprüfen.quelle
Einfache Lösung: -
Ausgabe :-
quelle
Vorausgesetzt
hash1
undhash2
quelle
Ich habe ein sehr einfaches Beispiel für einen Listenvergleich bei List Compare gefunden. In diesem Beispiel wird zuerst die Größe überprüft und dann die Verfügbarkeit des jeweiligen Elements einer Liste in einer anderen überprüft.
quelle
quelle
? true :false
, dass er in Ihrem Snippet benötigt wird?