Moin Moin !
ich muss in einem Programm eine größere Anzahl Strings halten.
Alles statisch, d.h. ich kann die direkt in den Code schreiben.
Es ist ein 2D Array Ausmassen von im Moment 1000*6 Feldern.
Am ende wirds vielleicht noch eine null mehr 10 000*6.
Ist das problemlos? Oder sollte ich die daten irgendwie anders halten?
10.000 * 6 * durchschnittliche Stringlänge
Mit 50 Zeichen durchschnittlicher Stringlänge brauchst Du allein mit den Daten bei fast 3 Megabytes, dazu kommen noch ein paar Bytes für Javas Speicherverwaltung.
Hinzu kommt noch, dass ich einen datensatz per zufall auswählen lasse, allerding mit zu- und abnehmender wahrscheinlichkeit. ich speichere also 0 bis array.length jede zahl bis zu 20 mal in einen 2. array. d.h. das ding ist max 200 000 felder lang. Problemlos oder doch nicht? Die Daten sind noch nicht da, ich kann nicht testen.
Warum baust Du Dir keine Dummy-Daten? Zwei bis drei verschachtelte for-Schleifen und Du hast beliebig viele Strings mit zufälligen Längen und zufälligem Text.
Wie viele von den 60.000 Strings brauchst Du wirklich? 1%? 10 Stück?
Ich würde die Strings in einer externen Datei (String-Datei) ablegen. In einer zweiten Datei (Index-Datei) würde ich Dateioffsets und Längen der Strings speichern. Wenn Du dann einen String brauchst, liest Du aus der Index-Datei den Offset und die Länge des Strings und liest dann aus der String-Datei den benötigten String. Damit ist ein Update der Strings sehr leicht: String-Datei austauschen und Index-Datei neu anlegen. Die Index-Datei brauchst Du nicht einmal selbst anlegen, Du prüfst beim Start einfach, ob die Index-Datei vorhanden und neuer als die String-Datei ist. Falls nicht, liest Du die String-Datei String-weise ein und speicherst Offsets und String-Längen in die Index-Datei. (Mal am Rande: Die Offsets der Strings reichen. Die Längen ergeben sich aus der Differenz zum nächsten Offset bzw. zur Dateilänge für den letzten String.)
Glaube mir, es gibt keine statischen Daten. Strings sind das erste, was der Kunde am Programm ändern will.
Alexander
Nein, ich beantworte keine Fragen per eMail. Dafür ist das Forum da.
Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so!"