Effizienter Suchalgorithmus gesucht

Status
Nicht offen für weitere Antworten.

banshee

Bekanntes Mitglied
Hallo,

hat jemand eine Idee, wie man folgendes möglichst effizient umsetzen kann:

1) Ich habe einen JTable, der ganz normal mit Daten gefüllt ist.
2) Ich habe eine Liste, wo Filterausdrücke drinstehen.

Beispiel: Der Header des JTables ist so aufgebaut: A B1 ... BN C D1 ... DN und Filterausdrücke sind dann z.B. sowas wie A > 10, B1 like "Hallo", C between 0 and 10 usw.

Problem Nr. 1) Da die Form des Headers immer so aussieht, macht es da Sinn, die Liste mit den Filterausdrücken vorzusortieren?

Problem Nr. 2) Wie durchlaufe ich den table dann? Im Prinzip muss ich dann ja jede Zelle einmal betrachten. Ich hatte mir das so gedacht, den filter einfach in ein String-Array zu splitten, dann mit dem Header der betrachteten Spalte zu verleichen und dann das Filterkriterium zu überprüfen.

Problem Nr. 3) Wie kann ich den Operator als String möglichst effizient in einen Ausdruck parsen?
 

banshee

Bekanntes Mitglied
Mittlerweile bin ich zu dem Schluss gekommen, dass folgendes am besten sein müsste:

Man sucht erst ein Paar (Spaltentitel aus dem Header, Spaltentitel aus einem Filter), überprüft anschließend die Bedingung, markiert alle Zeilen der Tabelle, für die die Bedingung zutrifft. Dann macht man mit dem nächsten Filter weiter und muss nur noch die markierten Zeilen untersuchen.
 

Paddelpirat

Bekanntes Mitglied
Hi,

wie füllst du denn überhaupt deine JTable? Sind die Daten irgendwie mit einer Datenbank verknüpft? Wenn du die Daten z.B. aus MySQL laden würdest, bräuchtest du ja nur noch geeignete SQL-Statements um die passenden Datensätze zu suchen/rauszufiltern.

Edit: Ist aber auch eine Frage des Programms, ob sich obige Möglichkeit anbietet. Wenn es sich um ein Client-Server Programm handelt könnte es wohl eher problematisch sein die Datensätze immer wieder aus der Datenbank auszulesen. Dann wäre es wohl sinnvoll die Filterkriterien nach und nach abzuklappern, wie du es oben gepostet hast.
 
Zuletzt bearbeitet:

banshee

Bekanntes Mitglied
Sie werden aus einer Datei eingelesen. Ich denke auch, dass das die beste oder zumindest eine annehmbare Lösung ist.

Ich bin nur noch auf der Suche, den Operator effizient zu parsen, d.h. von einem String möglichst einfach zu einem Ausdruck zu kommen, um sich die vielen if's zu sparen:

Java:
if(operator == ">")
  tableZelle > operand;
else if(operator == "<"
  tableZelle < operand;
usw.
 

Paddelpirat

Bekanntes Mitglied
Sie werden aus einer Datei eingelesen. Ich denke auch, dass das die beste oder zumindest eine annehmbare Lösung ist.

Ich bin nur noch auf der Suche, den Operator effizient zu parsen, d.h. von einem String möglichst einfach zu einem Ausdruck zu kommen, um sich die vielen if's zu sparen:

Hmm ich weiß ja nicht wie umfangreich die Daten sind, aber evtl. solltest du doch mal über eine Datenbank nachdenken, weil dir diese das parsen zu einem großen Teil abnehmen kann. Du müsstest dann deinen Filter-String in ein SQL-Statement umwandeln und die Datenbank erledigt den Rest.

Ansonsten bleibt dir wahrscheinlich nicht viel anderes übrig als einige if-else-Abfragen abzuarbeiten.
 
J

JohannisderKaeufer

Gast
Das Project apche commons collection definiert eine kleine Predicate-Api.

Predicate (Commons Collections 3.2.1 API)

Ziel ist es ein Predicate zu erstellen, bzw. zu konfigurieren.

Dem Predicat kann dann ein Objekt übergeben werden das evaluiert wird was dann true oder false zurückliefert.

Damit lassen sich dann recht gut Filter erstellen, die auch sehr komplex sein können. Im package functor bieten sich bereits vorgefertigte Geschichten, Wie das AllPredicate, ect.

Java:
class BiggerPredicate implements Predicate{ 
  private Object operand
  public BiggerPredicate(Object operand){
  this.operand = operand; 
  }
  public boolean evaluate(Object o){
    return operand < o
  }
}

Java:
class FooPredicate implements Predicate{ 
  private Object operator, operand
  public BiggerPredicate(Object operand, Object operator){
  this.operand = operand; 
  this.operator = operator;
  }
  public boolean evaluate(Object o){
    Predicate p;
    if(operator == ">")
      predicate = new BiggerOperator(operand);
   if(operator == "<")
     predicate = new LowerOperator(operand);
  return p.evaluate(o);
  }
}
 
Zuletzt bearbeitet von einem Moderator:

banshee

Bekanntes Mitglied
Eine Frage noch, ob sich der Aufwand für folgende Optimierung lohnt:

Zuerst durchlaufe ich den Header, schaue nach, welche Filterbedingung zu welchem Spaltenindex gehört und speichere dann das Paar (Index, Filterbedingung) in einer Collection. Diese wird anschließend aufsteigend nach den Keys sortiert und dadurch kann ich mir dann - vorausgesetzt es gibt nicht für jede Spalte eine Bedingung - zahlreiche Zellenvergleiche sparen.

Die Frage ist nur, ob der Aufwand für das Collection-Gedöns nicht größer ist, als die überflüssigen Bedingungen zu testen. Ich weiß auch nicht, welche Collection man da nimmt. Offensichtlich muss es ja eine Art Map sein, aber die erlauben ja alle keine doppelten keys und diese dann noch mit verketteten Listen zu verschachteln...ich denke da wird mir der Aufwand dann doch zu groß.
 

Marco13

Top Contributor
Collection die dann sortiert wird?.... Schau dir mal TreeMap an, die ist von vornherien sortiert (ist aber Uhrzeitbedingt nur ins Blaue geraten, weiß nicht ob das für dich passt...)
 

banshee

Bekanntes Mitglied
Daran hab ich auch als erstes gedacht, aber wenn ich dann zwei values unter dem gleichen key speichern will (was ja durchaus vorkommen kann, wenn ich zwei Filter auf die selbe Spalte anwende) wird der erste überschrieben.
 

Landei

Top Contributor
Nö, mach eine TreeMap, die auf eine Liste von Filtern zeigt. Oder schau unter google-collections, die haben sicher die richtige Datenstruktur für dich dabei...
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
LucasGlockner Effizienter byte-Zugriff auf ein long[]-Array Allgemeine Java-Themen 8
F Lesen effizienter als schreiben? Allgemeine Java-Themen 4
N Erste Schritte [HILFE] effizienter,leistungsfähigermbackground Pixelbot Allgemeine Java-Themen 5
U Variablen Stringarrays mit wenig verschiedenen Zeichen effizienter speichern Allgemeine Java-Themen 10
Fu3L Input/Output Brauche Rat bei effizienter Speicherung großer Datenmengen Allgemeine Java-Themen 21
Iron Monkey Object in Datei effizienter lesen / schreiben Allgemeine Java-Themen 13
L verkettete Listen oder Arrays + Indexlisten effizienter? Allgemeine Java-Themen 3
M Was ist schneller und effizienter GZIP(java) oder 7zip ? Allgemeine Java-Themen 5
C linearer Suchalgorithmus Allgemeine Java-Themen 2
B Suchalgorithmus der Klasse Vector Allgemeine Java-Themen 5
A Suchalgorithmus Allgemeine Java-Themen 5
dayaftereh Median Suchalgorithmus Allgemeine Java-Themen 4
G Suchalgorithmus (Boyer-Moore-Horspool-Raita) Allgemeine Java-Themen 9
S Suche Suchalgorithmus Allgemeine Java-Themen 2
Peterw73 Hilfe bei Java gesucht Allgemeine Java-Themen 3
N Java API für CardDav und CalDav gesucht Allgemeine Java-Themen 4
B OCR Library gesucht Allgemeine Java-Themen 6
V Javalehrer gesucht Allgemeine Java-Themen 2
K Java-Forum gesucht Allgemeine Java-Themen 12
O Best Practice Hilfe bei Algorithmus gesucht Allgemeine Java-Themen 10
A Hilfe gesucht Allgemeine Java-Themen 44
N Schulung zu Tomcat/JSP/Struts gesucht Allgemeine Java-Themen 0
E Gewollte Endlosschleife unterbrechen oder Alternative gesucht Allgemeine Java-Themen 2
S API gesucht Allgemeine Java-Themen 3
O Freies Tool zum Jar-File obfuscaten gesucht! Allgemeine Java-Themen 5
Londi DJ MP3 Lib gesucht Allgemeine Java-Themen 0
I Dringend nachhilfe in programmieren gesucht!!!!!!!! Allgemeine Java-Themen 1
I Dringend nachhilfe in programmieren in mannheim gesucht!!!!! Allgemeine Java-Themen 3
L Lib gesucht: Java-Objekte mit JSON Allgemeine Java-Themen 2
J Kalenderwecker gesucht Allgemeine Java-Themen 2
D Kuriose Geschichte -> Antwort gesucht Allgemeine Java-Themen 4
O Tag Cloud Algorithmus Idee gesucht Allgemeine Java-Themen 2
S Java XTools gesucht Allgemeine Java-Themen 2
N Boolsche Algebra via eval vereinfachen -> Ausmultiplizieren gesucht Allgemeine Java-Themen 15
E Nachhilfe in Java gesucht!!! Allgemeine Java-Themen 3
H Graph-Algorithmus gesucht Allgemeine Java-Themen 21
B Dringend Hilfe gesucht für Struktogramm Allgemeine Java-Themen 11
N Liste gesucht Allgemeine Java-Themen 2
Guybrush Threepwood Pattern gesucht: Punkt ohne Leerzeichen dahinter Allgemeine Java-Themen 3
B IRC-Library Gesucht Allgemeine Java-Themen 2
T Projektthema gesucht Allgemeine Java-Themen 2
c_sidi90 Aufgaben für Einstellungstest (Azubicasting) gesucht Allgemeine Java-Themen 10
M WebFramework für Userhandling gesucht Allgemeine Java-Themen 7
E Dezimalzahl -> Hexadezimalzahl [Lösungsweg gesucht] Allgemeine Java-Themen 2
M Funktion gesucht: Text vektorisieren Allgemeine Java-Themen 20
R Collections Datenstruktur gesucht Allgemeine Java-Themen 12
J Algorithmus gesucht (Stringtransformation) Allgemeine Java-Themen 4
P JFormattedTextField für durch Semikolon getrennte Integer-Werte gesucht / Regulärer Ausdruck Allgemeine Java-Themen 3
alex_fairytail IT-Kleinprojekt: Ideen gesucht! Allgemeine Java-Themen 18
B TypeOf oder ähnliches gesucht Allgemeine Java-Themen 3
A Bibliothek für NP-harte Zuordnung gesucht. Allgemeine Java-Themen 7
E Super erzwingen, konzept/pattern gesucht. Allgemeine Java-Themen 8
T Passende Listenstruktur gesucht Allgemeine Java-Themen 5
S Webstart: vollständige JNLP-Doku. gesucht Allgemeine Java-Themen 4
S Meinung zu Programmidee gesucht Allgemeine Java-Themen 9
Guybrush Threepwood Neuronale Netzwerke - Bibliothek gesucht Allgemeine Java-Themen 3
agentone Graphen-Lib gesucht Allgemeine Java-Themen 7
Ark Name für Funktion gesucht Allgemeine Java-Themen 5
F Spam-Mail-Programm gesucht Allgemeine Java-Themen 11
S JKL - Bibiliothek gesucht ? Allgemeine Java-Themen 9
hdi Beispiel für EDT Violations gesucht Allgemeine Java-Themen 4
J Open Source Projekt anbieten - Leitfaden gesucht Allgemeine Java-Themen 3
E Mehrfacher vererbungsersatz gesucht. Allgemeine Java-Themen 9
F Passende Struktur gesucht Allgemeine Java-Themen 6
A Regex gesucht Allgemeine Java-Themen 9
J Parser / Scanner / Tokenizer gesucht Allgemeine Java-Themen 3
V DecimalformatPattern gesucht Allgemeine Java-Themen 4
as182005 Bibliothek für Graph Visualisierung gesucht Allgemeine Java-Themen 3
H Framework empfehlung / gute Anfängerbeispiele gesucht Allgemeine Java-Themen 12
M Texteditor gesucht Allgemeine Java-Themen 3
D design gesucht - Angabe von zu ersetzenden substrings Allgemeine Java-Themen 2
P Java-Security-Aufgabe gesucht Allgemeine Java-Themen 2
J Listener für Ende eines Threads gesucht... Allgemeine Java-Themen 5
T Webseite (HTML) Parser gesucht Allgemeine Java-Themen 8
D klassenstruktur gesucht Allgemeine Java-Themen 17
N Datenstruktur für Netze gesucht Allgemeine Java-Themen 8
B Pattern gesucht, Programm Optionen, Casten vermeiden Allgemeine Java-Themen 3
S Verschlüsselungsbibliotheken gesucht Allgemeine Java-Themen 8
N Empfehlung für Java 1.5 Decompiler gesucht Allgemeine Java-Themen 2
D Banking Framework gesucht Allgemeine Java-Themen 5
G OOP Umsetzung gesucht Allgemeine Java-Themen 25
S Netzwerkdiagramm / Sequenzdiagramm - Ideen gesucht Allgemeine Java-Themen 2
S Stemming-Algorithmus gesucht (z.B. Porter) Allgemeine Java-Themen 2
J Bibliothek gesucht Ana_lysieren von wss. Referenzen Allgemeine Java-Themen 2
S VideoStreaming-Tool gesucht! Allgemeine Java-Themen 2
G Sehr gutes Java-Framework(Gui-Builder) auf XML-Basis gesucht Allgemeine Java-Themen 21
T Datenstruktur gesucht Allgemeine Java-Themen 18
D Report Engine gesucht Allgemeine Java-Themen 2
F Idee fuer Suchfeldmapping gesucht Allgemeine Java-Themen 10
C Pattern für Kommunikation gesucht Allgemeine Java-Themen 3
0 Rechenaufwändiger, kurzer Codeschnipsel gesucht! Allgemeine Java-Themen 17
E Countdownfunktion gesucht Allgemeine Java-Themen 52
S Koridinatensystem gesucht Allgemeine Java-Themen 4
M IRC Chat - Klasse oder Application gesucht Allgemeine Java-Themen 9
D gesucht Wörterbuch deutsch / englisch Allgemeine Java-Themen 4
N Denkanstösse zu Schnittmengensuche gesucht Allgemeine Java-Themen 9
M Schnell kleine Hilfe gesucht! Allgemeine Java-Themen 3
K Elegante Lösung zum Manipulieren von Collections gesucht Allgemeine Java-Themen 16
B Formel Interpreter gesucht Allgemeine Java-Themen 7
S Methode zum Zählen von Buchstaben in Strings gesucht Allgemeine Java-Themen 11

Ähnliche Java Themen

Neue Themen


Oben