Wie um zu überprüfen, ob eine HashMap hat alle Elemente einer ArrayList?
Wenn ich eine HashMap hashM
eine ArrayList arrayL
. Wenn ich möchte mit einer if Anweisung, um zu überprüfen, ob hashM
alle Elemente in arrayL
, wie kann ich das tun?
Ich cm aktuell mit so etwas wie
if (hashM.values().containsAll(arrayL.getPreReqs()))
Aber es funktioniert nicht richtig.
Liebe alle vielen Dank für die Antworten!
Eigentlich containsAll funktioniert aber die Art, wie ich Struktur meines codes falsch ist, so, dass ich falsche Ergebnisse. Jetzt wurde es behoben.
Prost!
getPreReqs
ist nicht eine Methode der ArrayList-Klasse... Was istarrayL
?ArrayList
hat keine Methode namensgetPreReqs()
.- Andere als, dass der code funktioniert einwandfrei.
- Dank Jonik, ContainsAll funktioniert.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gegeben
Den Ansatz, den man versucht (naja, fast, wie bereits von Marko Topolnik) ist in der Tat richtig:
(Oder
map.keySet().containsAll(list)
wenn Sie daran interessiert waren, die Karte Schlüssel statt Werte.)Für diese Arbeit wie erwartet für benutzerdefinierte Typen, Sie müssen natürlich umgesetzt haben
equals()
undhashcode()
richtig für Sie. (Siehe z.B. diese Frage oder-noch besser-Lesen-Element 9 in Effektive Java.)Durch die Art und Weise, bei der Arbeit mit Java-Sammlungen, ist es gute Praxis, um zu definieren, Felder und Variablen mit den Schnittstellen (wie List, Set, Map), nicht die Umsetzung-Typen (z.B. ArrayList, HashSet, HashMap). Zum Beispiel:
Ähnlich, eine "richtige" oder fließend Titel für Ihre Frage gewesen wäre ", Wie um zu prüfen, ob eine Karte hat alle Elemente einer Liste?". Überprüfen Sie heraus die Java tutorial-Sammlungen für mehr info.
Dein code ist korrekt, außer..
[BEARBEITEN]
Sie können
HashMap.containsValue(Object value)
Dein code sollte funktionieren - aber nicht besonders effizient. Sie müssen vergleichen Sie jedes element in der Liste mit jedem element in der Karte.
Wenn (und nur wenn) können Sie leicht extrahieren der Schlüssel von der Karte aus die Elemente dann wären Sie besser dran, die Schleife durch Ihre
List
und für jedes elementmap.containsKey(getKey(elem))
werden, wird dies viel schneller.Wenn Sie das tun, diese Art von Vergleich eine Menge, und Sie können nicht anzeigen von element-Taste, dann es kann sein, lohnt sich ein HashSet von den Werten für diesen Zweck.
Ich Stimme mit JoniK. Diese kann getan werden, in einer einzigen Zeile wie diese.