Beiträge von a9bejo
-
-
Was ist denn ein Nessi?
-
Hallo Fernando,
Du kannst Deine Fragen ja auch gleich hier im Forum stellen. Dann koennten eventuelle Antworten auch noch von anderen gelesen werden, die jetzt oder spaeter mit den selben Problemen zu kaempfen haben.
lg, ben
-
wenn die liste alphabetisch sortiert ist bietet sich ja eine binaere suche an.
@assoziative arrays: bin mir nicht sicher wie das in PHP ist, aber in der regel werden solche dictionary structuren durch hashtabellen realisiert und der zugriff ist sehr schnell. Besonders auch, da assoziative arrays in PHP direct in C implementiert sind.
@AVL baume, häufigkeit von strings, komplexe fragen auf eine grosse datenmenge:
Hier gibt es einen (wie ich finde recht coolen) trick: Anstatt eines Arrays benutzt man als Datenstruktur eine in-memory SQLite datenbank!
Hab ich persoenlich noch nicht gemacht, aber es klingt sehr vielversprechend:
Die daten kann man ansprechen wie jede andere datenbank auch ("select count(string) from strings where string = ...")
Es gibt kaum mehraufwand im code. Eine im memory datenbank anlegen und darin suchen erfordert fast so wenig zeilen code wie die pure array variante. Zumindest in Ruby und Python aber in PHP geht das sicher auch recht schick, da PHP ja soweit ich weiss SQLite seit Version 5 schon mit dabei hat.
SQLite ist extrem effizient, da es wie jedes andere RDBMS intern mit AVL Baumen arbeitet. Man kann auch Indicies auf die spalte legen.
SQLite ist in C und auf performance programmiert. da geht die post ab.
-
Zitat von master_fluc
Hi!
Gibts empfehlenswerte Bücher oder Tutorials?
lgSchau mal in diese Threads hier rein:
http://www.informatik-forum.at/showthread.php?t=24381
http://www.informatik-forum.at/showthread.php?t=42096
Tool:
Ausser dem Java Development Kit (JDK), der API Documentation und einem guten Lehrbuch wuerde ich ersteinmal nur einen Texteditor benutzen und keine IDE.
Ich benutze zwar auch Eclipse, allerdings find ich es sinnvoll wenn man das Uebersetzen und Ausfuehren der Programme zunaechst einmal selber macht. Ansonsten lernt man diese und andere Grundlagen naemlich nicht kennen und kann spaeter in sehr frustierende Situationen kommen. Die Vorteile einer IDE helfen Dir bei deinen ersten Schritten ohnehin nicht viel.
-
ich habe deinen code gerade getestet und bei mir geht alles gut: keine exception, das dokument wird erfolgreich erstellt. :confused:
-
Also ich hab jetzt meine demo so umgestaltet, das sie dein TableModel verwendet und hab nach wie vor keinerlei probleme (Ich bekomme die ausgabe "TEST", wenn ich einen wert in spalte 3 aendere.)
Java
Alles anzeigen/**File: JTableExample.java*/ /**@Author: Benjamin Ferrari , 2006*/ import java.util.Vector; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JTable; import javax.swing.event.TableModelEvent; import javax.swing.event.TableModelListener; import javax.swing.table.AbstractTableModel; class User{ public User(String fn, String ln, String gvgid){ setFn(fn); setLn(ln); setGvgid(gvgid); } private String fn; private String ln; private String gvgid; public final String getFn() { return fn; } public final void setFn(String fn) { this.fn = fn; } public final String getGvgid() { return gvgid; } public final void setGvgid(String gvgid) { this.gvgid = gvgid; } public final String getLn() { return ln; } public final void setLn(String ln) { this.ln = ln; } } class CMSTableModel extends AbstractTableModel{ //eclipse wants me to do this, ignore private static final long serialVersionUID = 1L; /** Creates a new instance of CMSTableModel */ private Vector<User> user_vec = null; public CMSTableModel(Vector<User> u) { this.user_vec = u; } public Object getValueAt(int row,int column) { User u = user_vec.get(row); switch(column) { case 0: return u.getFn(); case 1: return u.getLn(); case 2: return u.getGvgid(); } return null; } public int getRowCount() { return user_vec.size(); } public int getColumnCount() { return 3; } public String getColumnName(int column) { switch(column) { case 0: return new String("Vorname"); case 1: return new String("Nachname"); case 2: return new String("GvGID"); } return null; } public boolean isCellEditable(int rowIndex,int columnIndex) { if(columnIndex == 2) { return true; } else { return false; } } public void setValueAt(Object aValue, int rowIndex, int columnIndex) { User u=this.user_vec.get(rowIndex); switch(columnIndex) { case 0: u.setFn((String) aValue); case 1: u.setLn((String) aValue); case 2: u.setGvgid((String) aValue); } fireTableCellUpdated(rowIndex, columnIndex); } } public class JTableExample extends JPanel { private static final long serialVersionUID = 1L; public JTableExample() { JTable table = createTable(); // Hier der Code, in dem auf das aendern eines values reagiert wird. // Beachte auch, das du es die methoden event.getFirstRow() und // event.GetLastRow() gibt. Du kannst also auch die aenderungen von // mehreren zeilen gleichzeitig abfangen. table.getModel().addTableModelListener(new TableModelListener() { public void tableChanged(TableModelEvent event) { System.out.println("TEST"); } }); this.add(table); } private JTable createTable() { Vector<User> users = new Vector<User>(); users.add(new User("fn1", "ln1", "gvgid1")); users.add(new User("fn2", "ln2", "gvgid2")); users.add(new User("fn3", "ln3", "gvgid3")); JTable table = new JTable(); table.setModel(new CMSTableModel(users)); return table; } public static void main(String[] args) { JFrame frame = new JFrame(); frame.add(new JTableExample()); frame.pack(); frame.setVisible(true); } }
UPDATE: Wenn diese Demo genau so bei Dir nicht funktioniert, poste doch bitte mal die Ausgabe von "java -version" hier. Bei mir ist das
Code$ java -version java version "1.5.0_06" Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_06-112) Java HotSpot(TM) Client VM (build 1.5.0_06-64, mixed mode, sharing)
(auf Mac OSX) -
Erst wenn du die Eingabe bestaetigst (ENTER taste oder auf eine andere Spalte klicken), wird das event gefeuert. Ansonsten muss es an einem Bug in deiner Javaversion liegen (1.5 hier) oder du hast an dem democode etwas entscheidendes geaendert, denn ich hab meinen Code natuerlich getestet bevor ich ihn gepostet habe.
-
Zitat von jimbeam
Eine Frage hab ich aber noch! Ich will jetzt erst aktualisieren wenn ich einen Button klicke! Ist das auch möglich?
Das Problem versteh ich jetzt nicht. DU bestimmst doch, wann du die werte updatest (tableChanged), oder wann du sie in die Datenbank schreibst (was du mit dem rowData Object machst).* Du must in tableChanged ja nichts in die Datenbank schreiben. Du kannst dir einfach merken was du geaendert hast und erst bei buttonevent darauf reagieren.
* Du must in setValue nicht die Daten in deinem Model aendern. Du kannst das auch irgendwo zwischenspeichern und das spaeter machen, wenn du willst. Ich weiss jetzt nicht, wozu das gut sein sollte aber es geht.
* Du kannst auch selber entscheiden, wann tableChanged ueberhaupt aufgerufen wird (fireTableCellUpdated(row, col); )
-
Du must zunaechst einen Listener erzeugen, der die Methode 'tableChanged' ueberschreibt, und ihn an das TableModel anhaengen. die Indices fuer die Zeile und Spalte befinden sich dann im uebergebenen Event.
Hier eine vollstaendige Demo:
Java
Alles anzeigen/**@Author: Benjamin Ferrari , 2006*/ import java.util.ArrayList; import java.util.List; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JTable; import javax.swing.event.TableModelEvent; import javax.swing.event.TableModelListener; import javax.swing.table.AbstractTableModel; public class JTableExample extends JPanel { private static final long serialVersionUID = 1L; private String[] columnNames = new String[] { "A", "B", "C" }; private List<List<Object>> rowData = makeData(columnNames.length); public JTableExample() { JTable table = createTable(); // Hier der Code, in dem auf das aendern eines values reagiert wird. // Beachte auch, das du es die methoden event.getFirstRow() und // event.GetLastRow() gibt. Du kannst also auch die aenderungen von // mehreren zeilen gleichzeitig abfangen. table.getModel().addTableModelListener(new TableModelListener() { public void tableChanged(TableModelEvent event) { System.out.println("DEBUG: " + rowData.get(event.getFirstRow()).get(event.getColumn())); } }); this.add(table); } private List<List<Object>> makeData(int numCols) { List<List<Object>> rows = new ArrayList<List<Object>>(); for (int i = 0; i < 25; i++) { List<Object> cols = new ArrayList<Object>(); for (int j = 0; j < numCols; j++) { cols.add(Math.round(Math.random() * 100)); } rows.add(cols); } return rows; } private JTable createTable() { return new JTable(new AbstractTableModel() { private static final long serialVersionUID = 1L; public String getColumnName(int col) { return columnNames[col].toString(); } public int getRowCount() { return rowData.size(); } public int getColumnCount() { return columnNames.length; } public Object getValueAt(int row, int col) { return rowData.get(row).get(col); } public boolean isCellEditable(int row, int col) { return true; } public void setValueAt(Object value, int row, int col) { rowData.get(row).set(col, value); //hier muss ich angeben, das aenderungen vorgenommen wurden. fireTableCellUpdated(row, col); } }); } public static void main(String[] args) { JFrame frame = new JFrame(); frame.add(new JTableExample()); frame.pack(); frame.setVisible(true); } }
-
Zitat von jimbeam
Ich bins nochmal!
Ich hab ein Problem mit Tabellen: ich habe ein eigenes TableModel. Gibt es eine Funktion die überprüft ob Daten in der Tabelle geändert wurden? Ich habe nämlich 9000 DB-Datensätze und ich will nicht alle immer updaten, dass dauert zu lange!
-
Commons Math behandelt unter anderem Statistik. Ich bin nicht sicher, ob Dir das reicht.
Weka, laesst sich eigentlich auch als Statistik Library bezeichnen, und Weka ist sehr maechtig. Vielleicht ist ja was fuer Dich dabei? -
-
Entschuldige, wenn ich an der eigentlichen Frage vorbeirede, aber gibt
es einen Grund warum du keine bestehende API zum parsen verwendest?Meiner Erfahrung nach in das korrekte Parsen von RSS viel mehr Arbeit
als es auf den ersten Blick aussieht: über 20 unterschiedliche Standards,
Probleme mit Datenformaten und encoding (wie bei Dir gerade), und
dann auch noch die zahlreichen Feeds, die eigentlich ungültig sind, die
Du aber trotzdem berücksichtigen willst/musst.Wenn es Dir eigentlich nicht so sehr um das parsen geht, sondern du
eine gute Idee für einen aggregator hast, würden ich dir raten, die low
level Probleme eher mit ROME oder dem UFP lösen. -
Zitat von Spockman
diese 2te loesung steht deshalb da, weil mein erstes vorgehen nicht mehr klappt, wenn die menge der moeglichen werte groesser sein soll als die anzahl der ergebnisse.
btw, da wir jetzt anscheinend bei anderen Sprachen angelangt sind:
(ruby)
-
Zitat von Spockman
diese 2te loesung steht deshalb da, weil mein erstes vorgehen nicht mehr klappt, wenn die menge der moeglichen werte groesser sein soll als die anzahl der ergebnisse.
btw, wenn wir jetzt mit anderen sprachen um uns werfen:
-
Zitat von hellsmurf
Sowas MUSS man als Informatiker können.
Ich glaube nicht das CrazyInu Informatiker ist und ich wuesste auch nicht dass er das hier behaupted haette.Zitat von hellsmurfGeht zwar eleganter...
Ganz bestimmt sogar:CodeList<Integer> numbers = new ArrayList<Integer>(); for(int i=0;numbers.size()<N;i++){numbers.add(i);} Collections.shuffle(numbers);
oder -
Zitat von bosie
hm, ich finde bei den samsung-14-zoll-notebooks leider nur 1280x768 als maximale auflösung. und so billig sind die wirklich net.
mea culpa, hab mich verschireben: 15'' waren es, ich glaub ca dieses geraet:
(x20 IIer serie war das) http://www.netzwelt.de/news/71673_5.htmlbei amazon vor ca 14 monaten um 1099,- . Vergleichbare 15'' waren da bis max. 1280x768 . Das Notebook ist sehr leicht (leichter ls mein macbook), ausgezeichnet verarbeitet. Nach einem jahr war der luefter lauter als zu beginn und das notebook wurde etwas waermer, aber ansonsten war es in gutem Zustand.
Ich will samsung nicht mit IBM oder Apple vergleichen, und das Macbook ist ja auch preislich sehr stark; Aber von den ganzen Mittelfeldspielern hat das Samsung damals besser abgeschnitten als die angebote von dell, acer oder sony.
-
Ob ein Notebook wirklich gute Qualitaet hat, weiss man ja eigentlich erst, wenn man nach 3 Jahren zureckblickt. Ich hatte mal ein Notebook von Targa (von der qualitaet aehnlich wie ein Gericom), das hat im ersten Monat auch super funktioniert :).
Ich schaetze als Arbeitsrechner sind die Macbooks sehr gut geeignet. Zumindest bin ich mit meinem bis jetzt sehr zufrieden.
Meinen Recherchen nach sind besonders Apple und (frueher) IBM fuer sehr gute Qualitaet bekannt. Dann gibt es ein breites Mittelfeld und die Hoferkisteln und meine spezielle Freunde von Targa tummeln dann irgendwo ganz unten.
Ein guter Tip war fuer mich uebrigens Samsung. Ich hab mein ein Jahre altes Geraet jetzt wegen dem Macbook verkauft, war aber eigentlich sehr zufreiden damit. Und die preise sind sehr gut, vor allem wenn man sich die Displays von den Samsung Notebooks anschaut (14zoll mit 1440x1280 fuer ~1200 Euro war vor einem Jahr schon ziemlich gut) .
-
Ich glaube das kann vorkommen, wenn sich 2 unterschiedliche Java installationen in die quere kommen; wenn du z.b den Compiler von installation A aufrufst, und im pfad die libs von Installation B liegen.
Auf eingen Linuxdistributionen ist mir dieser Fehler schon untergekommen bild ich mir ein, wenn im Pfad auf eine alternative jvm verwiesen wurde.