# Speicherbedarf: Map oder halbleeres Array



## SlaterB (24. Apr 2007)

ich habe eine kleine Menge von Werten, z.B. 6,
und lege die in einem BigDecimal[6] ab, 
das Ganze 1000de Male

oft sind aber ein paar der Werte null,
ich frage mich bei sowas, ob es aus Speichersicht nicht vielleicht günstiger wäre,
eine HashMap<Integer,BigDecimal>() zu verwenden, wenns nur 1 oder 2 Werte sind,
die Integer-Keys wären kleine Werte bis 128

Zugriffszeiten und größtenteils auch Dauer der Erzeugung sind egal,
es geht mir hauptsächlich um den Speicherplatz und vielleicht sonstige Beanspruchung des Speichers bei Erzeugung,

bevor ich da groß selber experimentiere, frage ich mal vorher hier,
vielleicht gibts da noch ganz andere Dinge zu bedenken, kennt das jemand?

selbst wenn im einstelligen Bereich das Array nicht zu schlagen ist, wo kann man die Grenze sehen,
am wann lohnt sich eine Map?
bei Integer-Keys über 128 wäre ich durchaus bereit, die Keys zu cachen 

(edit: Liste find ich nicht so toll, wenn eben von zehn Werten Index 7 und 8 vorhanden sind, der Rest nicht)


----------



## Roar (24. Apr 2007)

die HashMap benutzt doch auch ein array zum speichern der daten ???:L


----------



## SlaterB (24. Apr 2007)

aber wenn ich einen Wert zum Index 99 ablege,
dann doch hoffentlich nicht ein Array der Länge 100..

so ein langes Array bräuchte ich nämlich um mal eben den EINEN Wert zum Index 99 zurückzugeben


edit: eine eigene Datenstruktur a la 'ein Array für Indexe, ein Array für Werte' sei mal dahingestellt,

ist jetzt eher eine Interessenfrage, wie groß so eine Standardmap ist 
und ob außer dem reinen messbaren belegten Speicher da noch was zu bedenken ist


----------



## Roar (24. Apr 2007)

ach so meinst du, dann würde die Map vermutlich weniger speicher verbrauchen.
bin trotzdem der meinung, dass du die paar bytes eigentlich vernachlässigen kannst. bekommst du schon speicherprobleme oder hast du nur angst davor?


----------



## SlaterB (25. Apr 2007)

ich kann auch an jeder Stelle wo int steht stattdessen long[0] benutzen,
das Programm wird noch funktionieren, dennoch nicht schön 

Argument 'ist egal' bleibt also außen vor 


und wie eben bereits editiert:
eine eigene Datenstruktur a la 'ein Array für Indexe, ein Array für Werte' sei mal dahingestellt,

ist jetzt eher eine Interessenfrage, wie groß so eine Standardmap ist
und ob außer dem reinen messbaren belegten Speicher da noch was zu bedenken ist

nun aber erst Gut Nacht


----------



## Roar (25. Apr 2007)

SlaterB hat gesagt.:
			
		

> ich kann auch an jeder Stelle wo int steht stattdessen long[0] benutzen,
> das Programm wird noch funktionieren, dennoch nicht schön
> 
> Argument 'ist egal' bleibt also außen vor


ne ernsthaft, die paar kb :roll: da würd ich eher überlegen ob ich wirklich BigInteger verwenden muss, die verbrauchen nämlich relativ viel platz.



> ist jetzt eher eine Interessenfrage, wie groß so eine Standardmap ist


so um die 90 bytes oder so

meine meinung ist immernoch: lohnt nich


----------

