AbstractTableModel getValueAt perfomance
Я новичок в JTable
может я чего-то не понимаю.
Давайте предположим, что у меня есть ArrayList
из 1000 Students
(id, name, surname, age
). И я хочу показать всем студентам в JTable
, Насколько я понял, я должен создать StudentTableModel
тот extends AbstractTableModel
и установить StudentTableModel
в JTable
, Поэтому мы можем рассмотреть StudentTableModel
в качестве "адаптера" между нашими ArrayList
и стол. В интернете я нашел такой пример реализации getValueAt
:
public Object getValueAt(int row, int col) {
Student student = arrayList.get(row);
switch (col) {
case 0:
return student.getId();
case 1:
return student.getName();
case 2:
return student.getSurname();
case 3:
return student.getAge();
}
}
Проблема в том, что имея 1000 студентов (строки) и 4 поля (столбцы), мы запустим этот переключатель 4000 раз. Пожалуйста, объясните, что я делаю неправильно или расскажите о лучшем решении.
2 ответа
Имея 1000 студентов (строки) и 4 поля (столбцы), мы запустим этот переключатель 4000 раз.
Предпосылка ложная, но вы должны профиль для проверки. JTable
использует шаблон flyweight для визуализации ячеек, поэтому будут проверяться только видимые ячейки. Этот упрощенный пример иллюстрирует основной механизм. Этот связанный пример хорошо масштабируется на тысячи строк.
Вы можете хранить студентов в Map
который отображает строку в атрибуты студента.
Map<Integer, Object[]> students;
Метод будет выглядеть так:
public Object getValueAt(int row, int col) {
return students.get(row)[col];
}