Java HashMap effizient nutzen?
Ich habe eine HashMap <String , Integer>.
Ich will eine Methode implementieren, die mir für einen String X alle Integer-Werte liefert die zu einem Key gehören, der mit X anfängt. Also praktisch X*.
Z.B. habe ich diese Paare:
("a", 1), ("aa", 2), ("b", 3), ("ab", 4)
und ich will alle Integer-Werte, die einen Key haben, der mit "a" anfängt. Dies sollte dann [1, 2, 4] liefern.
Muss ich, um das effizient zu machen (konstante Zeit) mir meine eigene HashMap implementieren oder gibt es schon fertige Methoden?
1 Antwort
Ich wüsste nicht, wie du das mit einer HasMap effizient hinbekommen willst.
Stattdessen würde ich die Paare nach dem Key sortieren und eine binäre Suche darauf machen.
Oder aber du speicherst das direkt in einen Baum (das dürfte noch effizienter sein als die blose Sortierung und lineare Ablage) und erstellst dir, wenn du es noch schneller machen möchtest, dann eine HashMap für einzelne innere Knoten.
Dann müsstest du dir deine Hash-Funktion passend selbst schreiben,w as eher nicht klappen dürfte.
Im Endeffekt ist da die Lösung aus dem letztem Absatz am nähesten dran, denn an sich sind deine Strings ja Hierachisch angeordnet aber mit der hash-Map kannst du evtl. schneller auf tieferliegende Nodes zugreifen.
Vielleicht kannst du auch eine HashMap in deiner implementierung eines Baumes verwenden, aber das würde sich hier nur lohnen, wenn du wirklich geizig mit deinem Speicher wärst.
ich dachte das geht villeicht effizient mir einer Hashmap , weil alle Strings die mit a anfangen villeicht einen ähnlichen Hashwert haben und somit weiß ich wo ich nach den weiteren Strings suchen muss ?