Alternative zu SortedMap?

Status
Nicht offen für weitere Antworten.

sutcha

Bekanntes Mitglied
Hallo,

ich habe Key-Value-Pairs (String,String), wobei der Key-String Zahlen beinhaltet, aber eben als String verwendet wird. Die Daten bekomme ich in der richtigen Reihenfolge sortiert aus der DB (Keys der größe nach).
Egal ob ich es in eine Hashtable oder TreeMap fülle, die Zahlen 1,2,12 sind immer in der Reihenfolge 1,12,2. Was gibt es für alternativen, die die Daten wie eine Liste behandeln, also in der Reihenfolge behalten, wie sie gefüllt wurden? ArrayList nimmt ja keine Paare an.

Jemand eine Idee? sollte ja eigentlich kein Problem sein, mir fällt nur nichts ein.

Viele Grüße,


sutcha
 
S

SlaterB

Gast
verwende einen Comparator, der die Strings wie Zahlen vergleicht,

für jeden Vergleich die Strings parsen wäre etwas aufwendig,
aber je nach Wertebereich reicht schon, erst die Stringlänge zu vergleichen und dann den Rest
 
S

Spacerat

Gast
Na das Thema passt ja... glaub' ich

Vorwärts "iterieren".. kein Problem... aber rückwärts???
trie.jpg

Also die Baumstruktur zeigt im Prinzip alle binären Zahlen von 000 bis 111. Darin gespeichert: Alle Primzahlen in diesem Bereich (2,3,5 und 7). Nun befinde ich mich zunächst erst mal an Position 111 (7) und möchte die nächst kleinere gespeicherte Primzahl (101 bzw. 5). Iteriere ich jedoch zurück, bekomme ich als nächste die 3 (110) und obwohl im Zweig darüber noch die gesuchte 5 liegt wird die 3 zurückgegeben. Schlimmer wirds noch, wenn ich mich im "geraden" Zweig (rote Position) befinde. Ich habe schon versucht mit MSB voran zu speichern, aber das dreht das Problem nur in die Andere Richtung. Inzwischen verwende ich dafür eine Baumstruktur die Bytes speichert, da passiert aber genau dasselbe. Wie bringe ich diese Struktur nun dazu mir das richtige Ergebnis zu liefern.

Neben bei: Eine andere Struktur (z.B. TreeSet) löst mein eigentliches Problem keineswegs und ist deswegen auch hier keine Lösung, da es darum geht jede menge Zahlen effizient zu speichern.

Ach so... möglicherweise reicht für sutcha ja bereits der o.g. "TreeSet" oder besser eine "TreeMap".

mfg Spacerat
 
S

Spacerat

Gast
@SlaterB: Erklärung gefällig? Obwohl... da ist doch ein Link :)
Also diese Baumstruktur (Trie) speichert bei mir jede Menge BigIntegers. Jeder Knoten (Unterklasse von TreeSet) stellt ein Byte dieser Zahlen (deswegen passt das Thema) an einer gewissen Stelle dar. So ein Knoten kann auch ein Objekt als Wert (bei mir der Status der Zahl, PRIME oder PROBABLEPRIME) speichern. Ist dieser Wert "null", ist die Zahl nicht vorhanden. Das auffinden einer Zahl geschieht per Zurückverfolgung der Knoten-Kette entsprechend dieser Zahl. Wurde sie nicht gefunden genügt eine Iteration nach oben, um die nächst höhere Zahl zu bekommen. Nach unten hin fällt diese Möglichkeit allerdings aus. Ich kann die entsprechende Implementation ja mal posten. Aber seid gewarnt, das ist jede Menge Code.

mfg Spacerat

@Edit: Na gut... war wohl doch das falsche Thema... Ich merke gerade, das die Vorwärts-Iteration genau die Ergebnisse liefert, die hier ausgemerzt werden sollten. Aber Das mit der TreeMap geht. Ich frage mich gerade... welchen Unterschied macht eigentlich TreeMap<BigInteger, String> zu TreeMap<String, String>? Wenn ich es mir recht überlege, dann ist die Lösung für sutchas Problem doch lediglich BigInteger statt Strings zu verwenden.
 

sutcha

Bekanntes Mitglied
Wie mache ich das mit dem Comparator? Ich weiß gerade nicht, was ich in die compare-Methode schreiben soll.

Ich brauch die Strings, sonst muss ich überall hin und her casten... was mach ich z.B. mit 0,1 was im String .1 ist.
 
S

SlaterB

Gast
wenn du Kommazahlen mit hast oder Negationszeichen oder führende Nullen oder gar Leerzeichen,
dann ist die String-Länge alleine nicht aussagekräftig,

dann musst du entweder durch Standard-Methoden oder individuell die Strings in Zahlen umwandeln
oder die Strings zeichenweise vergleichen, was allerdings fast aufs gleiche hinauslaufen kannst,

kann bei dir folgendes Beispiel auftreten?:
"55656" vs "5.656"

dann müsste man erstmal die Position des . herausfinden, Anzahl Zeichen davor zählen usw., nicht schön

-----

kannst du vielleicht höhere Objekte, also eine eigene neue Klasse verwenden?
darin speicherst du sowohl den String als auch einmalig umgewandelt die Zahl und zum Vergleich wird die Zahl herangezogen

----

suche mal bei google nach Comparable/ Comparator, evt. verbunden mit Java + Tutorial, das ist ja ein größeres Thema,
auch Forum-Suche ist nicht verboten
 

0x7F800000

Top Contributor
was spricht dagegen, die zahln einfach als zahlen abzuspeichern und diese auch als zahlen zu vergleichen? ???:L
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
F Gibt es mittlerweile eine Alternative zu DaisyDiff Allgemeine Java-Themen 2
F Streams als Alternative für dieses Problem ? Allgemeine Java-Themen 15
Zrebna Alternative Darstellung eines Codesnippets Allgemeine Java-Themen 33
W Alternative für Threads Allgemeine Java-Themen 6
Thallius Alternative für SwingWorker Allgemeine Java-Themen 5
J Suche Alternative zu Jasper Reports Allgemeine Java-Themen 4
M Suche Alternative zu JFreeChart Allgemeine Java-Themen 11
D Konstruktor - jedes Objekt einzeln erzeugen - alternative? Allgemeine Java-Themen 8
M DAOs veraltet - was ist die Alternative? Allgemeine Java-Themen 13
MiMa Array umbau oder Alternative? Allgemeine Java-Themen 5
C Alternative zu NetworkX in Java Allgemeine Java-Themen 1
M Alternative zur Serialisierung.. Protobuf? Allgemeine Java-Themen 9
B Alternative zu nebenläufigen Prozessen Allgemeine Java-Themen 4
BonoBoo Alternative zum endlosen Instanzieren Allgemeine Java-Themen 2
F Platzsparende Alternative zu .txt-Dateien Allgemeine Java-Themen 12
E Gewollte Endlosschleife unterbrechen oder Alternative gesucht Allgemeine Java-Themen 2
F Alternative sun.jdbc.odbc.JdbcOdbcDriver (Access Datenbank) Allgemeine Java-Themen 2
F alternative zu "JPEGImageDecoderImpl" Allgemeine Java-Themen 2
T Timer oder Alternative? Allgemeine Java-Themen 3
G Alternative zu .properties Dateien Allgemeine Java-Themen 20
H Alternative zu Stack Allgemeine Java-Themen 3
pikay Jar2Exe Alternative? Allgemeine Java-Themen 17
E javax.comm: Suche eine open source Alternative zu rxtx Allgemeine Java-Themen 8
H Alternative if Schreibweise mit ? Allgemeine Java-Themen 10
G suche Property alternative Allgemeine Java-Themen 4
H Wie schön oder unschön ist dieser code - alternative ? Allgemeine Java-Themen 5
E Viele if Abfragen auf viele Strings --> Alternative zu if Allgemeine Java-Themen 8
G libext Alternative? Allgemeine Java-Themen 5
S Alternative zu Robot (wegen Umlauten) Allgemeine Java-Themen 13
foobar Alternative zu JavaHelp gesucht Allgemeine Java-Themen 2
I Alternative zu getClass().getResourceAsStream() ? Allgemeine Java-Themen 9
D System.setProperty alternative Allgemeine Java-Themen 4
J alternative zu rsh ? Allgemeine Java-Themen 5
K KeyListener-Alternative ohne anfängliches Delay ? Allgemeine Java-Themen 5
G Alternative zu split() Allgemeine Java-Themen 3
K Alternative zu JNI Allgemeine Java-Themen 3
P Alternative zu replaceAll (jdk < 1.4) Allgemeine Java-Themen 14
M Alternative zu Thread : stop() ? Allgemeine Java-Themen 10
P Löschen eines keys in einer SortedMap Allgemeine Java-Themen 5
K SortedMap mit ValueComparator Allgemeine Java-Themen 2
ruutaiokwu AVLTree implements SortedMap - hat jemand sowas? Allgemeine Java-Themen 3
C Reihenfolge einer SortedMap/TreeMap umkehren Allgemeine Java-Themen 3
G Gibt es so eine SortedMap? Allgemeine Java-Themen 21

Ähnliche Java Themen

Neue Themen


Oben