Schreiben Sie den Code so, dass die Verwendung von Maps verborgen wird (das sollten Sie so oder so tun, und es hört sich so an, als würden Sie das auch machen). Wenn es darauf ankommt, weil Sie den Code profiliert haben und sehen, dass der Speicher wirklich ein Problem darstellt, finden Sie einen :-)
Wenn Sie zu diesem Zeitpunkt wissen, dass es ein Problem gibt, tut mir leid, ich kenne keins. Allerdings gehen Menschen allzu oft mit der "Idee" um, dass der Code langsam/zu viel Speicher usw. verbraucht und versuchen, ihn von Anfang an zu optimieren, anstatt ihn korrekt zu machen.
Das gesagt, wenn Sie etwas schreiben, von dem Sie wissen, dass es wichtig ist, sollten Sie während des Schreibens messen. Ich arbeite beispielsweise an Code zum Parsen von Klassendateien, ich mache eine kleine Änderung und sehe dann, wie sich die Leistung ändert. Zum Beispiel wusste ich genau, dass eine Änderung, die ich vorgenommen habe (3 Zeilen), mein Programm 4-mal langsamer gemacht hat... Ich habe dann die Zeit investiert, um herauszufinden, wie man es schneller machen kann.
Sind Sie sich außerdem sicher, dass Karten benötigt werden, wenn der Wert von "n" klein ist? Vielleicht reicht auch eine Liste? Haben Sie auch versucht, die bestehende Map so zu optimieren, dass sie weniger Speicher verbraucht?
1 Stimmen
Ich denke nicht, dass eine auf einer verketteten Liste basierende Map die "kleinste" wäre. Ich würde eine auf einem Array basierende erstellen, ohne die Entry-Objekte (d.h. die Werte werden direkt im Array gespeichert). Das bedeutet, dass Kollisionen unangenehm werden, aber es gibt Möglichkeiten, damit umzugehen.
0 Stimmen
Letzte Woche habe ich eine Implementierung genau dieser Map gemacht (also bist du nicht alleine mit deinen Bedürfnissen). Leider ist die Implementierung nicht Open Source. Ich habe es geschafft, die erforderliche Größe der Map auf 16 (für das Map-Objekt) + 16 (für das Array; aufgerundet) + 8 *
size
(für die Array-Inhalte) zu reduzieren. Das ist der geringste Speicherverbrauch, den man erreichen kann, es sei denn, man möchte direkt auf das Array zugreifen und nur statische Methoden verwenden, was nochmal weitere 16 Byte pro Map sparen würde. Aber in dem Fall wäre es keine Implementierung desMap
-Interfaces mehr.