Hi, ich habe eine Tabelle mit einer Spalte. Diese enthält Strings. Eine Methode soll die Zeile in der Tabelle markieren, die einen bestimmten String enthält. Im Moment mache ich das auf die folgende unschöne Art:
Das ist mit steigender Zeilenzahl sehr langsam
Im TableModel sind die Daten als HashMap gespeichert (Der Key ist der String der auch gesucht wird). Also denke ich gibt es bestimmt eine Möglichkeit an den Index zu kommen.
Model Sieht so aus:
Code:
public void selectTerm(String termKey){
...
for (int rowIndex = 0; rowIndex < model.getRowCount();rowIndex++){
if (model.getValueAt(rowIndex, 0).equals(termKey)){
jTableTermList.changeSelection(rowIndex, 0, false, false);
break;
}
}
}
Das ist mit steigender Zeilenzahl sehr langsam
Im TableModel sind die Daten als HashMap gespeichert (Der Key ist der String der auch gesucht wird). Also denke ich gibt es bestimmt eine Möglichkeit an den Index zu kommen.
Model Sieht so aus:
Code:
...
public class TableModelTerms extends AbstractTableModel {
private HashMap<String, Term> model;
public TableModelTerms() {
...
}
public TableModelTerms(HashMap<String, Term> model) {
this.model = model;
}
public Class getColumnClass(int c) {
return getValueAt(0, c).getClass();
}
public String getColumnName(int column){
switch (column) {
case 0:
return "Term";
case 1:
return "Tf";
case 2:
return "Df";
default:
break;
}
return "";
}
public int getRowCount() {
if (model == null || model.isEmpty()) return -1;
return model.size();
}
public int getColumnCount() {
if (model == null || model.isEmpty()) return -1;
return 3;
}
public Object getValueAt(int row, int column) {
if (model == null || model.values().isEmpty()) return null;
Object[] terms = model.values().toArray();
Term term = (Term)terms[row];
switch (column) {
case 0:
return term.getTerm();
case 1:
return term.getTtf();
case 2:
return term.getNoOfDocumentsOccursIn();
default:
break;
}
return null;
}
}