PLZ in einem int speichern?
-
Ich möcht ja hier kein Flamewar heraufbeschwören, aber hier wäre c/c++ im Vorteil,
da es einfach ascii-Zeichenketten unterstützt.Wieso ist das ein Vorteil? Ich sehe darin keinen Vorteil, zumal der ASCII Zeichensatz zu allem Überfluss auch noch von der Ländereinstellung abhängt.
Geht es dir um ein Byte Speicher mehr pro Zeichen?Falls es nicht ums Speichern, sondern Laden geht: Genau dafür hat String einen Konstruktor, der ein byte[] annimmt.
-
Nein darum gehts mir nicht, an byte habe ich nicht gedacht. Und die ersten 128
Zeichen sind festgelegt, damit sollte man die Postleizzahlen darstellen können.
Es stellt sich allerdings die Frage wieviel ein 5byte großes byte-Array tatsächlich
benötigt, da bei String ja auch einiges mehr als man annehmen würde benötigt wird.
-
5-Elementiges Byte-Array:
8 Byte Objekt-Overhead
4 Byte Länge
5 Byte Elementemacht 17 Byte.
Zugegeben, es ist immer noch etwas größer. Das ist aber bei Weitem nicht mehr so dramatisch.
-
IMO ist es absolut unbedeutend, da:
50000-Elementiges Byte-Array:
8 Byte Objekt-Overhead
4 Byte Länge
50000 Byte Elementemacht 50012 Byte.
-
@Optimizer: Naja, es kann schon vorkommen, dass man sehr viele kurze Zeichenfolgen benötigt, wie es hier zum Beispiel der Fall ist. In diesem Fall macht der Object-Overhead doch schon einen sehr großen Teil des Gesamtspeicherbedarfs aus.
-
ich wurde auf folgende Idee gebracht, doch mal die toOctalString(int) von der Klasse Integer zu verwenden, dass Ergebnis von mir sieht jetzt wie folgt aus
public String plztostring() { if(stellen ==4) return("0"+Integer.toOctalString(adresse.plz)); else return(Integer.toString(adresse.plz)); }
wobei stellen wie folgt errechnet werden
stellen = (int) (Math.log(plz) / Math.log(10) + 1);
bye
tt
-
Ehrlich gesagt gefällt mir das nicht. Aber das mußt letztendlich du wissen.
Was passiert eigentlich bei der Postleitzahl 09999?
-
Gregor schrieb:
Was passiert eigentlich bei der Postleitzahl 09999?
Ich vermute mal, javac beschwert sich.
Aber mal was anderes: Es geht hier ja um HARTKODIERTE Postleitzahlen. Warum schreibst Du da nicht einfach 1234 statt 01234? Wenn die Eingaben vom User kommen, stoert die fuehrende Null ja nicht.
-
Ich würde den Overhead mit den Strings in Kauf nehmen. Ist doch nicht so schlimm, dafür kann man auch kanadische Postleitzahlen speichern.
Und komfortabel ist String doch.
-
Wer will mir denn ernsthaft erzählen, dass solche Byteknausereien bei heutiger Hardware noch nötig sind ????? Ist doch selbst bei riesigen Mengen von Daten irrelevant.
Mal angenommen du willst 80 Millionen Einträge haben, dann würde dich die String-Variante immer noch "nur" 3,2 GB kosten.