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];
}
Другие вопросы по тегам