Ich habe eine HashMap erstellt, die String-Werte enthält. Ich möchte jedes Mal, wenn ich der Karte einen neuen Wert hinzufüge, prüfen, ob er bereits in der Hashmap vorhanden ist. Ich habe definiert
final HashMap<String, String> map = new HashMap<String, String>();
map.put(key, myURL.toString());
Wie kann ich die Hashmap durchlaufen, um zu überprüfen, ob ein Duplikat vorhanden ist?
Antworten:
7 für die Antwort № 1map.containsKey(key)
map.containsValue(val)
Wenn Sie darauf bestehen, es zu wiederholen, tun Sie Folgendes:
Iterator<Entry<String, String>>iterator=map.entrySet();
while(iterator.hasNext()){
final Entry<String, String>next=iterator.next();
next.getKey(); next.getValue();
}
Spezifiziert durch: http://docs.oracle.com/javase/7/docs/api/java/util/Map.html
11 für die Antwort № 2
Einfach:
return map.containsValue(myURL.toString());
beispielsweise. Oder mit Java8-Streams:
return map.values().stream().anyMatch(v -> v.equals(myURL.toString()))
Aber wie du fragst effizient Lösungen, ich schlage vor, Sie gehen mit der Old-School-Non-Stream-Version. Denn die zweite Version verbraucht höchstwahrscheinlich deutlich mehr CPU-Zyklen.
Nur wenn deine Map hat Zillionen von Einträgen, und Sie suchen auf Reaktionszeit erst dann vielleicht mit parallelStream()
könnte Ihnen die Antwort mehr geben schnell.
2 für die Antwort № 3
map.containsValue
Methode ist, was Sie brauchen. Sehen Dok
1 für die Antwort № 4
Überprüfen Sie die Javadocs der Klasse. Sie werden sehen, dass es zwei Methoden gibt, die key und containvalue enthalten http://docs.oracle.com/javase/7/docs/api/java/util/HashMap.html
1 für die Antwort № 5
boolean result = selections.values().stream().anyMatch(Boolean::booleanValue);
0 für die Antwort № 6
Apropos Effizienz: Das Vorhandensein dieser Datenstruktur ist ein Beweis für Ineffizienz und schlechtes Design. containsValue(V)
ist die Methode, nach der Sie suchen