Welche Datenstruktur um schnell zu suchen?

Status
Nicht offen für weitere Antworten.

plem

Mitglied
Hi zusammen!

Ich habe relativ viele Benutzerprofile die ich beim Starten der Applikation in's Memory lade. Ein Profil kann mehrere Attribute (keys) haben und jedes dieser Attribute kann mehrere Werte (values) haben.

Was für eine Datenstruktur verwende ich da am besten, um möglichst in kurzer Zeit ein bestimmtes Profil zu finden? (Ich muss nach einem oder mehreren values suchen können.)

Danke im Voraus für eure kreativen replies :)
 
B

bygones

Gast
Profile in einen array laden, den sortieren.

dann über binarySearch (in Klasse Arrays implementiert) suchen lassen....
 

byte

Top Contributor
wenn ein array nicht wünschenswert ist, tuts auch ein TreeSet mit entsprechendem Comparator und Collections.binarySearch(). dann werden elemente sofort richtig eingefügt (man spart sich das explizite sortieren) und es muss kein array mit ner harten obergrenze an elemente initialisiert werden.
 

plem

Mitglied
Danke für die Antwort!

Jedoch weiss ich nicht ob ich das so anwenden kann...
Das Problem ist, dass ein Profil mehrere Attribute haben kann. Bsp.

Profil A:
Alter: von 20 bis 30
Hobbies: Segeln, Schwimmen, Tauchen
Interessen: Reisen

Profil B:
Alter: 25 bis 40
Hobbies Schwimmen, Tauchen, Laufen
Interessen: Literatur, Reisen

Nun möchte ich eine Abfrage machen die mir alle Profile ausgibt bei denen das Alter 27 ist, UND als Hobby Schwimmen UND Tauchen haben, UND als Interessen Reisen eingetragen ist. Bei dieser Abfrage sollten nun Profil A und Profil B ausgegeben werden.

Aber ich hab echt keinen Plan wie ich das machen soll... ???:L
Jede Idee ist willkommen!
 

Bleiglanz

Gesperrter Benutzer
plem hat gesagt.:
Hi zusammen!

Ich habe relativ viele Benutzerprofile die ich beim Starten der Applikation in's Memory lade. Ein Profil kann mehrere Attribute (keys) haben und jedes dieser Attribute kann mehrere Werte (values) haben.

Was für eine Datenstruktur verwende ich da am besten, um möglichst in kurzer Zeit ein bestimmtes Profil zu finden? (Ich muss nach einem oder mehreren values suchen können.)

Danke im Voraus für eure kreativen replies :)

die wichtige Frage ist: wie viele?




rein logisch gesehen bräuchtest du wohl

Map<String,List<String>> // wenn sowohl keys als auch values strings sind

aber suchen kannst du da drin dann nur nach den keys, für die values müsstest du immer ganz durchiterieren

dazu könntest du dir beim Einlesen schon mal umgekeherte Maps aufbauen

Map<String, List<UserPofile>> // für jedes Attribut eine Liste der Profiles

könnte aber ein Performance/Speicherproblem werden
 

Bleiglanz

Gesperrter Benutzer
plem hat gesagt.:
Nun möchte ich eine Abfrage machen die mir alle Profile ausgibt bei denen das Alter 27 ist, UND als Hobby Schwimmen UND Tauchen haben, UND als Interessen Reisen eingetragen ist. Bei dieser Abfrage sollten nun Profil A und Profil B ausgegeben werden.
ist mit java im speicher schlecht zu machen

nimm eine embedded Datenbank (HSQL, Derby) und machs mit SQL
 
L

Limit

Gast
Wenn es mehr Daten sind ist wie schon gesagt eine ausgewachsene Datenbank ala SQL die beste Methode. Wenn die Zahl der Attribute also ( Segeln, Schwimmen, Tauschen, Reisen, ... ) fest!! und nicht zu groß ist, würde ich einfach ein boolean-array nehmen. Geschwindigkeit sollten dann eigentlich recht akzeptabel sein. Dann musst du beim Abfragen einmal durch die Liste durchgehen und passende Einträge in eine Ergebnisliste übernehmen. Ist zwar recht viel Overhead aber sollte mit linearem Aufwand gehen.
 

Elephant

Aktives Mitglied
Hallo,

dazu habe ich auch noch eine Frage. Ich stelle Datensätze in einer JTable dar, mit Hilfe eines eigenen TableModels. Die Daten liegen auch als Objekte vor, die mehrere Variablen mit verschiedenen Werten haben. Um die Tabelle zu filtern, muss ich auf verschiedenen Spalten eine Suche durchführen, wobei ich ja immer die Variablen in den Objekten durchsuchen muss.

Sollte ich dafür die Daten, auch in eine Datenbank legen, ehe ich sie in der JTable darstelle um schneller dannach suchen zu können oder ergibt es zuviel Last, da ich dann ja immer erst die Daten auslesen und bei Änderungen etc. wieder in die Datenbank speichern muss.

Die Anzahl der Datensätze kann so zwischen 100 und 50000 liegen.
 

AlArenal

Top Contributor
Das halte ich ja für ein Gerücht.. das einzige Problem mit nur einer einzigen Lösung war die Frage nach dem Leben, dem Universum und allem...
 

AlArenal

Top Contributor
TRunKX hat gesagt.:
und ich finde XML trotzdem toll.

Merkste was? Der Thread heißt nicht "Was findet TRunKX toll?" ;)

Schnelles Suchen und Sortieren gemixt mit der Abfrage unterschiedlicher Kriterien.. hört sich für mich nicht gerade nach einem Paradefall für den XML-Einsatz an. Willste das dann alles in XPath machen, oder wie?
 

TRunKX

Bekanntes Mitglied
...du wirst es nicht glauben aber ja!
Sollten die Daten keine Imense Menge erreichen so ist das (m)einer Meinung nach sogar Sinvoll ansonsten mach doch SQL wie es vorgeschlagen wurde aber die DAtenbankanbindung ist das Nadelöhr!
 

AlArenal

Top Contributor
Du übersiehst dabei, dass ich JoSQL vorschlug und in dem Fall gibt es keine Datenbank und damit auch kein Nadelöhr.

Mich würde mal interessieren von wo er diese Benutzerprofile einliest. Wenn die eh schon in einer SQL-DB hocken sollten...

Wenn nicht: Warum nicht? ;)

Übrigens unterstützt HSQL auch das direkte Arbeiten auf CSV-Dateien...
 

TRunKX

Bekanntes Mitglied
Naja dann fragen wir doch mal...

Also Thread ersteller wie liegt das vor? Woher kommen die DAten wohin gehen die Daten was haste vor mit den Daten was sind das für Daten?
 

Elephant

Aktives Mitglied
Also, ich bin zwar nicht der Thread-Ersteller, aber ich hatte die Frage weiter unten gestellt.

Ich lese eine XML-Datei ein, wandele den Inhalt in Objekte um, ein DOM/JDOM Baum frisst zuviel Speicher und ist auch für meine Zwecke unhandlich, und stelle diese Objekte dann in einer JTable dar oder 'Teile' der Objekte in anderen Views. Die Tabelle soll man sortieren und filtern können (und die Einträge editieren).
 

Elephant

Aktives Mitglied
@AlArenal
Danke für den Tip. Ich hab nur mal das Sortieren mit GlazedLists und mit der TableSorter Klasse aus Swing ausprobiert für ca 40.000 Zeilen einer JTable, die TableSorter-Klasse war dabei deutlich schneller. Ich weiß nicht ob dafür das filtern mit GlazedLists schneller geht, GlazedLists hat ja auch den Vorteil, dass sich die Listen automatisch aktualisieren etc.

Weiß jemand vielleicht ob filtern, sortieren, suchen vielleicht doch mit einer Datenbank schneller gehen würde?
 

AlArenal

Top Contributor
Ich habe zwei Jahren oder so mal ne Anwendung mit integrierter SQL-Datenbank erstellt (HSQLDB). Damals habe ich mal ein TableModel direkt über JDBC implementiert und das war grottig lahm...

Wenn du Live-Daten in Swing über ne DB laufen lässt, würde sich das wohl ähnlich verhalten und ich würde nicht viel Performance erwarten, denn deine Anwendung braucht für jede Sortierung / Filterung Zeit um

- den SELECT auszuführen
- die Daten in ein ResultSet zu laden
- aus dem ResultSet die Daten wieder rauszuholen und
- neue Instanzen mit den daten zu erzeugen und diese dann
- in ein TableModel zu laden, um dieses dann
- eine JTable anzeigen zu lassen

Arbeitest du dagegen direkt auf den Objekten sparst du den ganzen Overhead zur Abfrage und zum Umschichten und Verpacken der Daten.

Hattest du mal JoSQL getestet? Damit arbeitest du ebenfalls direkt auf den Objekten und kannst dennoch die gewohnte und gebräuchliche SQL-Syntax nutzen um Daten zu beackern..
 

Elephant

Aktives Mitglied
Danke für Deine Antwort.

JoSql habe ich mir erstmal nur kurz angeschaut, wollte es mir aber nochmal näher anschauen. Mir ist eigentlich nur erstmal wichtig wie schnell die Suche etc. funktioniert.
 

Slava

Bekanntes Mitglied
ich habe der Link zur josql angeschaut ,der AlArenal angeboten hat.
wau!!!!
coole Sache.

und jetzt zum XML!
Ich verstehe überhaupt nicht varum sch... Xml sich durchgesetzt hat???
Für eine beschreibung von kleinen Dokumenten die speter mit css bearbeitet werden, kann ich das noch verstehen.
Aber algemein ist xml der grösste schpeicherfresser allen zeiten.

Beispiel 1
datei person.cvs

name;vorname;
müller;otto;
heiden;jens;



Beispiel 2
person.xml

<? xml ........?>
<person>
<name>müller</name>
<vorname>otto</vorname>
</person>
<person>
<name>heiden</name>
<vorname>jens</vorname>
</person>

jetzt vergleichen Sie die dateigrössen.

Es tut mir leid das ich von Thema abgekommen bin, aber bei wort xml raste ich aus.
 

AlArenal

Top Contributor
Das ist Anti-XML-Propaganda ;)

XML ist wunderbar um Daten zu beschreiben, umzuwandeln, zu übertragen. Wen ineressiert da die Größe der Dateien, wo Textdaten sich doch wunderbar komprimieren lassen, wenn nötig?

Was würden denn allerlei große und kleine Systeme machen, könnten sie nicht z.B. via Webservice an andere Systeme und Datentöpfe angebunden werden? XML ist die Schlüsseltechnik Insellösungen abzuschaffen und alles immer weiter zu verzahnen.

In der Praxis wiegt die bessere Handhabbarkeit einer 500 KB großen unkomprimierten XML-Datei den Nachteil der Dateigröße gegenüber einer 50 KB großen CSV-Datei locker auf. In der XML-Datei ist klar wie Daten strukturiert sind und welches Format sie haben, bei CSV & Co. nicht.

Aber das auch alles nur so nebenbei (von jemandem, der relativ wenig mit XML zu tun hat)...
 

AlArenal

Top Contributor

Bleiglanz

Gesperrter Benutzer
und jetzt zum XML!
Ich verstehe überhaupt nicht varum sch... Xml sich durchgesetzt hat???
Für eine beschreibung von kleinen Dokumenten die speter mit css bearbeitet werden, kann ich das noch verstehen.
Aber algemein ist xml der grösste schpeicherfresser allen zeiten.

Beispiel 1
datei person.cvs
Code:
name;vorname;
müller;otto;
heiden;jens;


Beispiel 2
person.xml
Code:
<? xml ........?>
<person>
<name>müller</name>
<vorname>otto</vorname>
</person>
<person>
<name>heiden</name>
<vorname>jens</vorname>
</person>

jetzt vergleichen Sie die dateigrössen.

Es tut mir leid das ich von Thema abgekommen bin, aber bei wort xml raste ich aus.
du bist noch nicht lange in der EDV? oder schon zu lange?

zur CSV Lösung fällt mir jetzt mal auf die schnelle ein:

1) ist die erste zeile ein Datensatz? oder die Kopfzeile? wo steht das? wird ein Computer in 5 jahren noch wissen ob er die erste zeile überlesen muss oder nicht??

Und bei deinem Beispiel: ist am Zeilenende ein ; oder nicht? wer sagt einem das??

2) Escape Schrott: wenn man mit ; trennt, dürfen die Einträge keine ; mehr enthalten, aber welches Escapezeichen soll man verwenden

3) Encoding Schrott: was ist mit ÄÖÜ und chinesischen Schriftzeichen

4) Komplexität: was ist, wenn man mal nicht eine dämliche "Aufzählung von Zeilen" hat, sondern wenn z.B. jede Person noch eine in der Größe variable Liste von "Attributen" zugeordnet hat

5) Keine Constraints: in einer CSV darf jeder SCH* rein, während man bei XML mit Schemas relativ starke Constraints erzwingen kann

usw. usf


Es gibt natürlich Fälle in denen die Dateigrösse ein wichtiger Faktor ist, aber manchmal spielts eben keine Rolle
 

Elephant

Aktives Mitglied
Hallo,

ich wollte nur noch ergänzen, dass ich JoSql ausprobiert habe und dass es wirklich gut funktioniert und während meinen Tests auch ziehmlich schnell war.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
FelixN Teilsummenproblem / welche Datenstruktur Java Basics - Anfänger-Themen 2
M Implementieren einer Datenstruktur, welche nur 5 Objekte speichert Java Basics - Anfänger-Themen 3
S Welche Datenstruktur ist die optimalste um Funktionen fuer bestimmte Wertebereiche abzurufen..? Java Basics - Anfänger-Themen 5
StupidAttack Gson, welche Datenstruktur? Java Basics - Anfänger-Themen 4
D Welche Datenstruktur für welche Problemstellung? Java Basics - Anfänger-Themen 10
B Finden gemeinsamer Kanten: welche Datenstruktur ? Java Basics - Anfänger-Themen 9
G Welche Datenstruktur ( Sets / Maps)? Java Basics - Anfänger-Themen 10
U Welche Datenstruktur soll ich nehmen? Java Basics - Anfänger-Themen 11
G Welche Datenstruktur ist hier die sinnvolste Java Basics - Anfänger-Themen 6
S Welche Datenstruktur für Tabelle/DB? Java Basics - Anfänger-Themen 5
E welche Datenstruktur (Collection) Java Basics - Anfänger-Themen 4
6 Welche Datenstruktur? Java Basics - Anfänger-Themen 3
F Welche Datenstruktur für Matrix mit Vektoren? Java Basics - Anfänger-Themen 2
E Welche Datenstruktur für Spielbäume? Java Basics - Anfänger-Themen 13
K Welche Datenstruktur für eine Bibliotheksanwendung? Java Basics - Anfänger-Themen 5
C Java Array Struktur, welche ist wann besser? Java Basics - Anfänger-Themen 12
N Welche Objekte kann man zu einem Set hinzufügen Java Basics - Anfänger-Themen 4
berserkerdq2 Habe eine Klasse, welche public ist, diese hat eine public Methode, die nicht static ist. Wenn ich nun versuche aufzurufen Probleme? Java Basics - Anfänger-Themen 8
berserkerdq2 Habe zwei exceptions, welche ist ein Kommunikationsfehler und welche ein Ausgabefehler? Java Basics - Anfänger-Themen 4
G Welche Attribute kommen in den Konstruktor? Java Basics - Anfänger-Themen 5
Jambolo Methode, welche die 3 letzten Parameter Werte speichert Java Basics - Anfänger-Themen 20
Q SMS basierte Applikationen, welche Programmiersprache? Java Basics - Anfänger-Themen 8
Igig1 Welche Werte sind als default Werte in einem Array, der als Datentyp eine Klasse hat? Java Basics - Anfänger-Themen 1
D Welche GUI Library für eine Client Server Chat App Java Basics - Anfänger-Themen 14
H Welche Werte bei Objekterzeugung eingeben? Java Basics - Anfänger-Themen 2
Arita welche Fehler gibt es noch? wie kann ich es noch vervollständigen Java Basics - Anfänger-Themen 15
tony241188 Implementieren Sie die Klasse Hersteller, welche die folgenden Elektrogeräte produziert Java Basics - Anfänger-Themen 3
P Welche Zeile in Tadople gibt einen compiler error? Java Basics - Anfänger-Themen 5
W Welche Komponente ist geeignet? Java Basics - Anfänger-Themen 1
A Welche Operation ist das? Java Basics - Anfänger-Themen 2
J Welche Java-Version installieren Java Basics - Anfänger-Themen 9
M Ausgabe einer Liste welche mehrere Stacks enthält Java Basics - Anfänger-Themen 3
K GUI Entwicklung - Welche Richtung passt für euch zum mobilen Zeitalter? Java Basics - Anfänger-Themen 4
T Datenbank | Welche am Sinnvollsten? Java Basics - Anfänger-Themen 5
S Welche Verteilung? Java Basics - Anfänger-Themen 1
L Welche Methode? Java Basics - Anfänger-Themen 7
O Methoden welche ich implementier Java Basics - Anfänger-Themen 11
A Wie erkennt die JVM welche class verwendet werden muss? Java Basics - Anfänger-Themen 3
M JDK installieren Welche Software bei XP? Java Basics - Anfänger-Themen 5
H Welche IDE zum Buch "Programmieren mit Java" von Reinhard Schiedermeier des Verlags Pearson Studium Java Basics - Anfänger-Themen 19
U Best Practice Fehleranalyse, welche Fehler macht Ihr beim Lernen bzw. auch später Java Basics - Anfänger-Themen 12
E jProgressbar, 6 Versuche, welche value angeben ? Java Basics - Anfänger-Themen 3
M Welche Entwicklungsumgebung? Java Basics - Anfänger-Themen 32
I Welche Schleife/Bedingung nehme ich her Java Basics - Anfänger-Themen 5
C Methoden Welche JSoup Methoden Und Parameter für diese HTML Tags Java Basics - Anfänger-Themen 4
K Erste Schritte Java lernen - Welche Bücher? Java Basics - Anfänger-Themen 1
P welche Komponente ist im Layout? Java Basics - Anfänger-Themen 2
TheMenox Methoden Bestimmung an welche Methode eine andere Methode ihren Wert weitergeben soll Java Basics - Anfänger-Themen 35
K Methoden mit den Namen accept. Welche Funktion haben diese? Java Basics - Anfänger-Themen 2
G Lambda Ausdruck: Welche Methode ist die Richtige? Java Basics - Anfänger-Themen 1
J Welche Methoden laufen im neuen thread ?? Java Basics - Anfänger-Themen 9
G Welche Java-Version auf meinem Rechner? Java Basics - Anfänger-Themen 2
Z Methoden Zugriff mit Klasse 3 auf Methode von Klasse 2 welche in Klasse 1 erzeugt wird Java Basics - Anfänger-Themen 6
A Klassen welche Klassen importiert Eclipse automatisch Java Basics - Anfänger-Themen 2
V welche Methode am besten sich für JPG einfügung in Java anzugewöhnen ? Java Basics - Anfänger-Themen 4
M Welche externen Bibliotheken sind in Java sehr zu empfehlen? Java Basics - Anfänger-Themen 4
I Grafische Benutzeroberflächen - welche Komponente nehme ich am besten? Java Basics - Anfänger-Themen 13
G Welche JAVA IDE? Java Basics - Anfänger-Themen 3
S Klassen Zugriff auf Attribute einer zweiten Klasse, welche durch dritte gesettet wurden? Java Basics - Anfänger-Themen 2
E wann welche Konstanten verwenden? Java Basics - Anfänger-Themen 7
K Welche Java Version ist die richtige Java Basics - Anfänger-Themen 3
V Welche Exceptions müssen importiert werden? Java Basics - Anfänger-Themen 3
A Design Pattern - Welche? Java Basics - Anfänger-Themen 33
C Datenbank - Welche Java Basics - Anfänger-Themen 5
S Welche Art von Liste? Java Basics - Anfänger-Themen 3
S Eigene Exception Schreiben und Welche Auslösen wie ? Java Basics - Anfänger-Themen 7
A Wenn genau welche Liste verwenden? Java Basics - Anfänger-Themen 6
T Welche Schleife? Java Basics - Anfänger-Themen 6
P Java Stream, wann welche Stream verwenden? Java Basics - Anfänger-Themen 3
S Collections Welche Collection ist am geeignetsten? Java Basics - Anfänger-Themen 3
S Input/Output Welche Möglichkeiten Eingabe von User abfragen Java Basics - Anfänger-Themen 5
P Swing - Welche Klasse für ausgeben von Ergebnissen? Java Basics - Anfänger-Themen 3
R Welche Datenstruktor für diese Liste? Java Basics - Anfänger-Themen 6
B Erste Schritte Welche Kenntnisse brauche ich für diese Programmidee? Java Basics - Anfänger-Themen 4
P Vererbung herausfinden welche Klasse was erbt Java Basics - Anfänger-Themen 3
K welche art von Liste für TableModell Java Basics - Anfänger-Themen 2
D Welche API für komplexe XML-Struktur? Java Basics - Anfänger-Themen 25
S welche Programmstruktur? Java Basics - Anfänger-Themen 8
M Welche Datenbank? Java Basics - Anfänger-Themen 5
B Welche Themengebiete benötige ich? Java Basics - Anfänger-Themen 7
S Welche Collection kann sich selber sortieren? Java Basics - Anfänger-Themen 8
H Welche Art der Ein/Ausgabe Java Basics - Anfänger-Themen 2
U Welche(s) Framework(s) wären geeignet? Java Basics - Anfänger-Themen 8
StrikeTom Welche Dateitypen unterstützt JMF (Java Media Framework)? Java Basics - Anfänger-Themen 6
S Welche Collection? Java Basics - Anfänger-Themen 5
A Welche UML Software benutzt ihr / ist empfehlenswert? Java Basics - Anfänger-Themen 2
N Welche Datenstukturen und Methoden Java Basics - Anfänger-Themen 3
L Auswahl auf welche Art gespeichert werden soll Java Basics - Anfänger-Themen 6
B Welche Java-Installation ist aktiv? Java Basics - Anfänger-Themen 2
S Welche möglichkeiten gibt es eine Zahl zu spiegeln? Java Basics - Anfänger-Themen 17
U Welche Seite für Anfänger Java Basics - Anfänger-Themen 11
K Welche Entwicklungsumgebung für Einsteiger? Java Basics - Anfänger-Themen 16
S Webapplikation welche alternative zu gwt? Java Basics - Anfänger-Themen 2
cowabunga1984 Unit-Testing - Welche Testfälle sind relevant? Java Basics - Anfänger-Themen 4
S Welche Methode in JFrame überschreiben? Java Basics - Anfänger-Themen 12
H Designfrage: Welche Liste? Java Basics - Anfänger-Themen 3
Z Welche IO-Klasse verwenden? Java Basics - Anfänger-Themen 2
M Der Java Schlüsselwort null; ?Welche Anweisung und Sinn? Java Basics - Anfänger-Themen 12
G Herausfinden, welche Componente als LETZTES focus hatte Java Basics - Anfänger-Themen 2
H Welche PDF Biblothek? Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben