Schnelles Auslesen von HashMaps unter JDK1.4.2

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Hallöle zusammen!

Ausgangslage:
Ich habe eine HashMap. Die Keys sind immer Strings. Die Values können entweder Strings oder ArrayLists, gefüllt mit Strings, sein.

So generiere ich die HashMap und erfasse einige Daten:
Code:
		// auffüllen
		HashMap person = new HashMap();
		person.put( "name", "Hans Muster" );
		person.put( "country", "Switzerland" );

		List hobbies = new ArrayList();
		hobbies.add( "Segeln" );
		hobbies.add( "Schwimmen" );
		hobbies.add( "Feiern" );

		person.put( "hobbies", hobbies );

So lese ich die Daten wieder aus:
Code:
		// auslesen
		Iterator iter = person.keySet().iterator();
		while( iter.hasNext() ) {
			String key = (String) iter.next();
			Object val = person.get( key );

			if( val instanceof String ) {
				System.out.println( key + "=" + val );
				
			} else if( val instanceof List ) {
				while( !((ArrayList) val).isEmpty() ) {
					String listVal = (String) ((ArrayList) val).remove( 0 );
					System.out.println( key + "=" + listVal );
				}
				
			} else {
				// exceptionhandling
			}
		}

Wer hat eine bessere / performantere Idee, die Daten wieder auszulesen? Evtl. eine andere Datenstruktur einsetzen? Mit dem JDK1.5 könnte man das ganze relativ elegant lösen, jedoch für das JDK1.4.2 ist mir bis jetzt noch keine bessere Lösung eingefallen :(

Vielen Dank im Voraus und Gruss
 
B

bygones

Gast
ich versteh die Logik nicht dahinter..

wenn du so deinen Hashmap afubaust kannst du nur eine Person einfügen. Sobald du eine zweite Person adden willst, auch mit country usw. so werden die bestehnde Person gelöscht.

Mach einfach eine Klasse Person, die die Informationen, die du momentan in der Map hast, als Instanzvariablen hält.

wenn du dann mehrere Personen speichern willst kannst du dies einfach in einer Collection (z.b. ArrayList) tun.
 

Bleiglanz

Gesperrter Benutzer
iteriere doch einfach über das EntrySet und nicht über das KeySet?!


dann sparst du dir in der Schleife das erneute Nachschlagen mit get

und mach die Casts nicht zu (ArrayList) sondern zu (List), wenn du schon vorher nur auf instanceof List testest

würde aber auch eine Klasse Person vorschlagen...
 

plem

Mitglied
Den Beitrag habe ich geschrieben, war aber nicht eingeloggt -> deshalb als Gast

Ok, danke mal für die Tipps.

Diese HashMap würde ich serialisiert per RMI von einem Client auf den Server übertragen. Der Inhalt der HashMap sind die Angaben des Benutzers. Deshalb gibt's immer nur eine Person.

Zuerst hatte ich auch die Idee eine Klasse Person zu erstellen, wo die Werte einfach als Instanzvariablen abgelegt sind. Jedoch muss das Profil beliebig durch neue Attribute erweiterbar sein. Dann müsste ich die Attribute mühsam über Reflection auslesen, was ich denke nicht wirklich performant ist..?!

Die Attribute werden dann auf dem Server in eine DB geschrieben. Deshalb brauche ich die Keys und die Values. Die Keys entsprechen in der DB den Spaltennamen.

Versteht ihr jetzt mein Problem?

Meine Frage ist eigentlich nur, ob es eine elegantere/schnellere Lösung gibt, als der oben gepostete Source? Dieser sollte wie gesagt mit dem JDK1.4.2 funzen.
 

Bleiglanz

Gesperrter Benutzer
wie gesagt: entrySet, du verwendest Zeit beim get(key)

ansonsten gehts dann wohl nicht anders

übrigens: wenn der Value eine List ist, wie soll das dann in der DB-Spalte abgespeichert werden???
 

plem

Mitglied
Gute Frage. Habe ich auch schon drüber nachgedacht...

Wenn ich eine Zweite Tabelle mit diesen Werten (z.B. hobbies) machen würde, ergäbe dies eine n:n Beziehung. Somit müsste ich noch eine Zwischentabelle für das Mapping erstellen. (Daher für jedes Attribut das mehrere Werte annehmen kann, gäbe es zwei Tabellen mehr :()

Ich denke am einfachsten ist es, wenn ich diese Werte einfach durch einen Separator getrennt in das selbe Feld der Tabelle schreibe und dann bei den queries LIKE %string% verwende...

Finde ich zwar nicht besonders schön, erscheint mir aber zweckmässig.
 

Bleiglanz

Gesperrter Benutzer
ist aber totales gestümpere, das lacht dich jeder sql-hansel aus

wär ja noch nicht mal die 1NF :)

wenns kleiner ist, dann mach doch einfach

tabelle personen

tabelle personenattribute -- der n-m-Verknüpfer

tabelle attributewerte

usw

ist schön logisch, und die "keys" sind selbst dynamisch (d.h. bei neuen Eigenschaften müsste man noch nicht mal die DB ändern)
 

plem

Mitglied
Ja, ich weiss, du hast recht!

Aber: Mit deiner Variante müsste ich für's reinschreiben mehrere queries machen und für das Auslesen JOIN's benötigen. Das (nehme ich mal an) benötigt mehr Zeit als mit dem LIKE Operator... Oder nicht?
 

Bleiglanz

Gesperrter Benutzer
plem hat gesagt.:
Ja, ich weiss, du hast recht!

Aber: Mit deiner Variante müsste ich für's reinschreiben mehrere queries machen und für das Auslesen JOIN's benötigen. Das (nehme ich mal an) benötigt mehr Zeit als mit dem LIKE Operator... Oder nicht?

Nein, das ist marginal bei kleinen Tabellen, ganz ok bei grossen mit Indizes

aber dafür ist die Struktur nicht so bescheuert, das ist viel wichtiger

es fängt ja schon bei deinem "ArrayIneinerSpalte" an, wenn ein Wert zufällig den Separator enthält ist schon alles kaputt

und das StringGewürge mit Zusammensetzen beim Speichern und wieder Zerlegen beim Holen kostet ja auch

und LIKE mit einem % am Anfang ist auch nicht so superschnell
 

AlArenal

Top Contributor
BLeiglanz hat völlig Recht.

Wenn man schon etwas Neues bauen kann, sollte man es nach bestem Wissen und Gewissen bauen, oder es gleich ganz sein lassen. Wir haben hier auch so einen Frickler, wenn ich mir da Daten aus der DB hole, bekomme ich jedesmal aufs Neue nen Würgereiz. Zum Glück schreibe ich meine XML-RPC-Skripte in PHP nur einmal und muss sie nur selten anfassen.. bei dem heißt ID auch noch NR und umgekehrt, alle Bezeichner sind in Deutsch (inkl. Rechtschreibfehler).. man wird da ganz narrisch...

Im Grunde habe ich meine Skripte als Ausbügler dazwischen, damit ich wenigstens in meinen Anwendungen nach meinem besten Wissen und Gewissen und gägngien Bezeichnungen (und auf Englisch) arbeiten kann...

Bevor du dich selbst in die Situation bringst dich irgendwann einmal vor igrnedwem rechtfertigen zu müssen - machs gleich mit ner Kreuztabelle. Und mach dir keinen Kopf um die Performance von JOINs, etc.

Ein guter JOIN und der Tag ist dein Freund...

Im Zweifelsfalle ist es immer schneller die DB ihre Aufgaben selbst erledigen zu lassen, als erst Daten rauszuziehen und dann in PHP oder sonst einer Sprache die Daten wieder irgendwie umzubiegen, weil man sie im Rohformat nicht gebrauchen kann.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Schnelles Potenzieren Java Basics - Anfänger-Themen 5
S Erfahrungswerte von schnelles durchlaufen von Listen mit 2 Werten Java Basics - Anfänger-Themen 10
V Schnelles Potenzieren Java Basics - Anfänger-Themen 10
D schnelles durchsuchen von Dateien Java Basics - Anfänger-Themen 29
S Daten aus Import Datei auslesen und sortieren Java Basics - Anfänger-Themen 2
T array auslesen Java Basics - Anfänger-Themen 2
I Klassen von einem package laden, Statisches Feld auslesen und Objekt erstellen Java Basics - Anfänger-Themen 8
N Einzelne Werte aus einem TreeSet auslesen Java Basics - Anfänger-Themen 2
D Eclipse will nicht auslesen Java Basics - Anfänger-Themen 6
E TIF Datei auslesen Java Basics - Anfänger-Themen 2
krgewb Breite und Höhe eines Bildes in base64 auslesen Java Basics - Anfänger-Themen 3
sserio TXT-Datei Auslesen und den Wert jedes Namen ausrechnen etc. Java Basics - Anfänger-Themen 37
J Speichern von zwei Variablen durch Auslesen aus einem Numberfield Java Basics - Anfänger-Themen 2
U Sekunden von LocalTime auslesen, wie möglich? Java Basics - Anfänger-Themen 1
E Outlook ordner auslesen Java Basics - Anfänger-Themen 4
R Eigenschaft über Parameter auslesen und ändern Java Basics - Anfänger-Themen 15
B Bin komplett am verzweifeln :( Verkettete Liste die Objekte hat Attribut auslesen Java Basics - Anfänger-Themen 14
J Datei aus Netzwerk auslesen Java Basics - Anfänger-Themen 9
J Jsonfile auslesen Java Basics - Anfänger-Themen 8
A Eine Textdatei auslesen Java Basics - Anfänger-Themen 16
N Aus einem String die Anzahl der Vokale auslesen Java Basics - Anfänger-Themen 40
H Array rückwärts auslesen funktioniert nicht Java Basics - Anfänger-Themen 3
J Bestimmte parameter aus Jsonfile auslesen Java Basics - Anfänger-Themen 15
AleXusher Mehrdimensionales Array aus txt.file auslesen Java Basics - Anfänger-Themen 4
L Zeichen an bestimmter Stelle auslesen Java Basics - Anfänger-Themen 4
3 Textdatei Zeilenweise auslesen Java Basics - Anfänger-Themen 3
J Json Datei auslesen Java Basics - Anfänger-Themen 4
I Java String einlesen und auslesen Java Basics - Anfänger-Themen 11
S Tastatureingabe auslesen und in Konsole ausgeben Java Basics - Anfänger-Themen 6
S CSV Datei auslesen und anders darstellen Java Basics - Anfänger-Themen 2
G Scanner nutzen und Index auslesen Java Basics - Anfänger-Themen 8
N JTable auslesen Java Basics - Anfänger-Themen 6
N Java CSV Datei auslesen Java Basics - Anfänger-Themen 6
F Webseiten Quelltext auslesen Java Basics - Anfänger-Themen 5
J Datei auslesen (nur bestimmte Stellen) Java Basics - Anfänger-Themen 2
I csv auslesen, mittels List Java Basics - Anfänger-Themen 18
S Letzte Zahl eines Integer auslesen? Java Basics - Anfänger-Themen 3
G If / While Programm (Datei auslesen) Java Basics - Anfänger-Themen 6
S Aus einer .bz2 Datei auslesen Java Basics - Anfänger-Themen 2
K Textdatei auslesen und über Mqtt schicken Java Basics - Anfänger-Themen 4
B Name von Verzeichnis bekommen - Files von einem Ordner auslesen Java Basics - Anfänger-Themen 4
A Daten auslesen/vergleichen Java Basics - Anfänger-Themen 3
D XML von Seite auslesen Jsoup Java Basics - Anfänger-Themen 2
I Druckerauflösung auslesen - mittlerweile möglich? Java Basics - Anfänger-Themen 4
B WSDL auslesen? Java Basics - Anfänger-Themen 8
D Methoden Textdokument erstellen und auslesen. Java Basics - Anfänger-Themen 46
B HTML Code / Seite auslesen und JAVA Objekte erstellen Java Basics - Anfänger-Themen 12
S Datein auslesen und verarbeiten Java Basics - Anfänger-Themen 1
J Geld speichern und wieder auslesen Java Basics - Anfänger-Themen 10
S CSV auslesen UTF-8 Problem Java Basics - Anfänger-Themen 7
D Datei auslesen & Werte in Variable speichern Java Basics - Anfänger-Themen 12
K String buchstaben auslesen Java Basics - Anfänger-Themen 9
S Amazon Produktbeschreibung auslesen und nach Keywords suchen Java Basics - Anfänger-Themen 2
x-tshainge Interface Wie kann ich aus Textfeldern auslesen Java Basics - Anfänger-Themen 6
Z Ersten Buchstaben eines Elements eines String-Arrays auslesen Java Basics - Anfänger-Themen 5
B .txt. Datei auslesen und bestimmten Wert wiedergeben Java Basics - Anfänger-Themen 5
CptK x wert eines Bildes auslesen Java Basics - Anfänger-Themen 1
T Website auslesen Java Basics - Anfänger-Themen 2
T String auslesen bzw. überprüfen Java Basics - Anfänger-Themen 1
L CSV Auslesen Java Basics - Anfänger-Themen 5
B Auslesen von PDF / Bilder Java Basics - Anfänger-Themen 5
das_leon Alle Zeilen einer CSV-Datei auslesen Java Basics - Anfänger-Themen 1
D Mit Java HTML bzw Javascript auslesen Java Basics - Anfänger-Themen 1
F Arrays Sätze speichern und einzelne Worte mit Index Angabe auslesen Java Basics - Anfänger-Themen 4
F Zwischenwerte aus Browser auslesen Java Basics - Anfänger-Themen 19
S Jede Ziffer einer Zahl auslesen, damit rechnen und beim Ergebnis wiederholen ? Java Basics - Anfänger-Themen 20
G Servlet - externe HTML (URL) auslesen Java Basics - Anfänger-Themen 1
T class Datei auslesen Java Java Basics - Anfänger-Themen 5
P Liste auslesen und in Variablen speichern Java Basics - Anfänger-Themen 7
D String erste Zahl mit LKZ auslesen lassen Java Basics - Anfänger-Themen 36
J Hashmap auslesen Java Basics - Anfänger-Themen 7
J Auslesen/speichern und wieder einlesen Java Basics - Anfänger-Themen 7
D String untereinander auslesen lassen Java Basics - Anfänger-Themen 2
M Aus Datei auslesen und untersuchen ob diese Zeile schon vorhanden ist Java Basics - Anfänger-Themen 3
DaCrazyJavaExpert Variablen Zahlen aus Strings auslesen Java Basics - Anfänger-Themen 4
J Informationen aus Webseiten auslesen Java Basics - Anfänger-Themen 1
S Text aus einer HTML Datei auslesen Java Basics - Anfänger-Themen 1
M Einzelne Pixel in einem Bild auslesen und bearbeiten Java Basics - Anfänger-Themen 1
dragonfight86 Erste Schritte OpenDocument auslesen Java Basics - Anfänger-Themen 13
I Texte mit Absätzen in Dateien speichern und auslesen Java Basics - Anfänger-Themen 1
W DNS Name auslesen + weitere Anfängerfrage Java Basics - Anfänger-Themen 4
C Werte aus JTable auslesen Java Basics - Anfänger-Themen 4
Chrizzey45 Calc-Dokument in Java auslesen? Java Basics - Anfänger-Themen 2
B Datei auslesen und 2D-Array anlegen Java Basics - Anfänger-Themen 1
B Key auslesen/ausgeben innerhalb von foreach() Java Basics - Anfänger-Themen 5
M Eigenschaften einer Datei auslesen Java Basics - Anfänger-Themen 5
M Textarea auslesen und beschreiben Java Basics - Anfänger-Themen 8
JokerBlacky Klassen Klasse Queue Klasse mit Attributen anhängen und auslesen können Java Basics - Anfänger-Themen 4
Y Bildschirmauflösung auslesen Java Basics - Anfänger-Themen 4
S for schleife auslesen Java Basics - Anfänger-Themen 4
Voreck String Zeichen für Zeichen auslesen Java Basics - Anfänger-Themen 9
Voreck Array aus txt datei auslesen Java Basics - Anfänger-Themen 2
N JFreeChart --> TimeSeries auslesen Java Basics - Anfänger-Themen 9
OlafHD Datei Auslesen Java Basics - Anfänger-Themen 6
M Metadaten OpenOffice mit Java auslesen Java Basics - Anfänger-Themen 9
P JList, aus selectedValue bestimmten Wert aus Containerklasse auslesen Java Basics - Anfänger-Themen 4
J OpenOffice Dokumentenvariable mit Java auslesen Java Basics - Anfänger-Themen 1
P Daten von Internetseite auslesen Java Basics - Anfänger-Themen 10
L Text eingeben und im Textfeld auslesen lassen Java Basics - Anfänger-Themen 2
T Combobox Wert auslesen und damit weiterrechnen Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben