首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AbstractTableModel getValueAt性能

AbstractTableModel getValueAt性能
EN

Stack Overflow用户
提问于 2014-05-07 07:47:45
回答 2查看 1.6K关注 0票数 1

我是JTable的新手,也许我什么都不懂。

假设我的ArrayList为1000 Students (id, name, surname, age)。我想向所有JTable的学生展示。据我所知,我必须创建StudentTableModelextends AbstractTableModel,并将StudentTableModel设置为JTable。因此,我们可以将StudentTableModel视为ArrayList和表之间的“适配器”。在互联网上,我发现了getValueAt的这样一个实例实现。

代码语言:javascript
复制
 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次。请解释我做错了什么,或者告诉我一个更好的解决方案。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-05-07 19:43:39

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

前提是错误的,但是您应该通过配置文件来验证。JTable对单元格渲染使用http://en.wikipedia.org/wiki/Flyweight_pattern,因此只检查可见的单元格。这个简化的示例说明了基本的机制。这个相关的示例扩展到了数千行。

票数 2
EN

Stack Overflow用户

发布于 2014-05-07 08:06:43

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

代码语言:javascript
复制
Map<Integer, Object[]> students;

这个方法看起来是这样的:

代码语言:javascript
复制
public Object getValueAt(int row, int col) {
    return students.get(row)[col];
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23511824

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档