AbstractTableModel getValueAt性能

时间:2014-05-07 07:47:45

标签: java swing jtable abstracttablemodel

我是JTable的新手,也许我听不懂。

假设我有ArrayList 1000 Studentsid, 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 个答案:

答案 0 :(得分:2)

有1000名学生(行)和4个字段(列),我们将运行此开关4000次。

前提是错误的,但您应该profile进行验证。 JTable使用flyweight pattern用于单元格rendering,因此只会检查可见单元格。这个简化的example说明了基本机制。这个相关的example可以很好地扩展到数千行。

答案 1 :(得分:0)

您可以将学生存储在Map中,以便将行映射到学生属性。

Map<Integer, Object[]> students;

该方法看起来如此:

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