Java AbstractTableModel getValueAt性能

Java AbstractTableModel getValueAt性能,java,swing,jtable,abstracttablemodel,Java,Swing,Jtable,Abstracttablemodel,我是JTable的新手,可能我不懂什么 假设我有1000名学生的ArrayList(id、姓名、年龄)。我想在JTable中显示所有学生。据我所知,我必须创建StudentTableModel,该扩展了AbstractTableModel,并将StudentTableModel设置为JTable。因此,我们可以考虑 StudioTabLimoDele/Cuth>作为我们的 ARARYLIST/和表之间的“适配器”。在互联网上,我发现了getValueAt的示例实现: public Object

我是
JTable
的新手,可能我不懂什么

假设我有1000名学生的
ArrayList
id、姓名、年龄)。我想在
JTable
中显示所有学生。据我所知,我必须创建
StudentTableModel
,该
扩展了AbstractTableModel
,并将
StudentTableModel
设置为
JTable
。因此,我们可以考虑<代码> StudioTabLimoDele/Cuth>作为我们的<代码> ARARYLIST/<代码>和表之间的“适配器”。在互联网上,我发现了
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次。请解释我做错了什么,或者告诉我一个更好的解决方案。

您可以将学生存储在映射到学生属性的
映射中

Map<Integer, Object[]> students;
有1000个学生(行)和4个字段(列),我们将运行此开关4000次


前提是错误的,但您需要验证
JTable
使用for单元格,因此只检查可见单元格。这说明了基本的机制。这一关联可以扩展到数千行。

项目的数量不会有问题,这没什么错。如果你认为4000是一个大的数字,不要担心,处理器不考虑任何东西。如果每次都要执行数据库查询,那么这将是一个问题,即使这样,切换也不是问题,而是实际的数据检索。我建议你在没有实际证据证明性能是一个问题之前不要去考虑性能。@mKorbel请解释你的意思。有两种选择,取决于方向1。如果此数组用作整个程序的主数据源,则需要为AbstractTableModel使用数组(然后使用并重写),2。否则,若要使用DeafultTableModel,则整个程序的所有值都可以从此模型访问。
问题是,有1000个学生(行)和4个字段(列),我们将运行此开关4000次。
除了Kayaman的注释,JTable一次只能显示20-30行,因此当您滚动时,代码只能执行80-120次;这里有一个相关的例子。
public Object getValueAt(int row, int col) {
    return students.get(row)[col];
}