我遇到了一些Java代码,用于对JList进行前缀搜索。但是,从算法的角度来看,该算法的效率很低,它会在列表上为每个按键进行线性搜索,并在紧密循环内进行慢速大小写转换。

我可以想象,对于大量数据,使用自定义实现的三元搜索树将是效率更高的解决方案。但是,如果人们正在努力寻找简单的代码,而又不具有要求这种复杂性的性能要求,那么是否有其他更简单的方法可以改进这种算法而又不需要大量的额外代码?

for (int i=0; i < jList1.getModel().getSize(); i++) {
    String str = ((String)jList1.getModel().getElementAt(i)).toLowerCase();
    if (str.startsWith(m_key)) {
        jList1.setSelectedIndex(i);
        jList1.ensureIndexIsVisible(i);
        break;
    }
}

最佳答案

要快速进行更改,请考虑

String str = ((String)jList1.getModel().getElementAt(i));
str.substring(1, m_key.length()).equalsIgnoreCase(m_key);

除此之外,您还可以自己编写startsWithIgnoreCase的实现,该实现应该快速简便。

编辑:这似乎是将列表滚动到与用户输入匹配的元素。您绝对应该考虑一个更复杂的数据结构。这已经做了很多,您也许可以在网上找到一些有效的算法。

07-24 09:27