java - JTable 中更快的搜索算法

标签 java swing jtable rowfilter

我正在尝试实现我自己的 JTable RowFilter,因为我使用的是 Java 1.4(此版本中似乎不存在 RowFilter)。然而,我仍然相信我正在使用的算法可以被更快的算法取代。我已经在包含 30.000 条记录和 8 列的虚拟表上尝试了我的算法,并且我在不到一秒的时间内得到了结果。但有时,在输入搜索条件(基本上是带有 DocumentListener 的 JTextField)时会出现一点延迟。这是我正在使用的算法:

    public void searchList()
    {  

        for(int i=0;i<list.size();i++)
        {
            Employee e=(Employee)list.get(i);

            Pattern pattern=Pattern.compile(search.getText(),Pattern.CASE_INSENSITIVE);
            Matcher matcher=pattern.matcher(e.getFname());
            if(matcher.find())
            {
                result.add(e);
                continue;   
            }
            matcher=pattern.matcher(e.getLname());
            if(matcher.find())
            {
                result.add(e);
                continue;   
            }
            matcher=pattern.matcher(e.getHeight());
            if(matcher.find())
            {
                result.add(e);
                continue;   
            }
            matcher=pattern.matcher(e.getOccupation());
            if(matcher.find())
            {
                result.add(e);
                continue;   
            }
            matcher=pattern.matcher(e.getSize());
            if(matcher.find())
            {
                result.add(e);
                continue;   
            }
            matcher=pattern.matcher(e.getSkills());
            if(matcher.find())
            {
                result.add(e);
                continue;   
            }
            matcher=pattern.matcher(e.getSsn());
            if(matcher.find())
            {
                result.add(e);
                continue;   
            }
            matcher=pattern.matcher(e.getStrength());
            if(matcher.find())
            {
                result.add(e);

            }
        }
        model.fireTableDataChanged();
        table.updateUI();
    }
    }

我用来将数据绑定(bind)到 TableModel 的主要数据结构是一个 ArrayList,它保存名为“Employee”的类的对象。另一个名为 result 的 ArrayList 包含与搜索条件匹配的所有“Employee”对象。请记住,过滤发生在所有 8 列上。我认为我所做的唯一优化是在第一列匹配上添加“Employee”对象,而不必遍历其余列。

关于此事有什么建议吗?非常感谢您的帮助=)

最佳答案

由于您似乎在所有字段中搜索完全相同的值,因此我只需将它们连接起来并进行一次匹配即可。

此外,我认为没有任何充分的理由说明为什么您要在每次迭代中编译该模式。

关于java - JTable 中更快的搜索算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5814309/

相关文章:

java - 如何在 Jtable 上正确对齐标题​​边框

java - JTable 行中的重复值

java - 如果给定条件,如何突出显示行表?

java - 奇怪的 Spring 上下文组件扫描

按下 java 键来执行操作

java - 在一个 jcombobox 中进行选择启用不同的 jcombobox

java - JCombobox 字符串项(可见)和整数键(固有)

java - 将文件名中的日期模式与滚动频率解耦

java - Java 中是否可以从其参数中的对象启动线程?

java - ReadWriteLock 等待对象被设置