Ich habe eine Reihe von Zahlen von 0 bis die Länge des Arrays, mit der Ausnahme, dass eine gewisse Anzahl fehlt, und ich habe es zu finden.HashMap mit ganzen Zahlen lange Zeit
public static Integer findNumber(Integer[] array){
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
for(Integer number : array){
map.put(number, 1);
}
for(Integer i=0; i<array.length; i++){
if(map.get(i)==null)
return i;
}
return -1;
}
Ich dachte, dies würde eine gute Lösung sein, aber eine wirklich lange Zeit in Anspruch nimmt setzen, mit dem Zählen Duplikaten Sortier Lösung viel schneller ist, und ich habe keine Ahnung, warum. Hash für Integer ist, dass Integer selbst, so ist es nicht einmal Zeit zu zählen Hash verloren, und kein Iterieren mit equals (das hängt von Zahlen, nahm ich ein Beispiel mit nur einem einzigen Duplikat). Ich fühle mich, als würde ich hier etwas Offensichtliches vermissen. Ich habe versucht, Anfangskapazität und Ladefaktor anzugeben, aber es macht nur noch schlimmer. Kann ich das irgendwie optimieren?
Es setzen, dass viel Zeit in Anspruch nimmt, nicht Lösung zu finden iterieren, Putting ist wie 95% der Zeit der Ausführung.
Könnte langsam sein wegen einer Menge Boxen/Unboxing passiert? – kaqqao
Ein Set wird etwas schneller als eine Karte sein. –
Ich dachte auch, ich begann mit primitiven Ints, änderte dann für Integer, änderte überhaupt nichts. Ich denke, selbst wenn es die Dinge langsamer macht, macht es sie nicht so viel langsamer. – Haratino