2014-05-07 2 views
1

Я новичок в JTable, может быть, я что-то не понимаю.AbstractTableModel getValueAt perfomance

Предположим, у меня есть 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 раз. Пожалуйста, объясните, что я делаю неправильно или расскажу о лучшем решении.

+0

не может быть проблем с числами предметов, – mKorbel

+1

В этом нет ничего плохого. Если вы считаете, что 4000 - это большое число, не волнуйтесь, процессор ничего не считает. Единственное, что может быть проблемой, - это каждый раз, когда вы должны выполнять запрос базы данных, даже тогда коммутатор не будет проблемой, а фактическим извлечением данных. Я предлагаю вам не пытаться думать о производительности, прежде чем у вас есть фактическое доказательство того, что это проблема. – Kayaman

+0

@mKorbel Пожалуйста, объясните, что вы имеете в виду. –

ответ

2

Имея 1000 студентов (строки) и 4 поля (столбцы), мы будем запускать этот переключатель 4000 раз.

Предпосылка неверна, но вы должны profile проверить. JTable использует flyweight pattern для ячейки rendering, поэтому только видно. Этот упрощенный example иллюстрирует существенный механизм. Этот связанный example хорошо масштабируется в тысячи рядов.

0

Вы можете хранить студентов в Map, который сопоставляет строки атрибутам ученика.

Map<Integer, Object[]> students; 

метод будет выглядеть так:

public Object getValueAt(int row, int col) { 
    return students.get(row)[col]; 
} 
+0

Альтернативно, «Карта <Ключ, Студент>'; вот связанный [пример] (http://stackoverflow.com/a/9134371/230513). – trashgod

 Смежные вопросы

  • Нет связанных вопросов^_^