【发布时间】:2012-02-13 16:02:52
【问题描述】:
我遇到了一些用于在 JList 上进行前缀搜索的 java 代码。然而,仔细观察它,算法的核心是非常低效的,它对每个按键使用列表的线性搜索,并在紧密循环中进行慢速大小写转换。
我想对于非常大量的数据,自定义实现的三元搜索树将是一个更有效的解决方案。但是,如果一个人正在努力编写简单的代码并且没有需要如此复杂的性能要求,那么是否有其他更简单的方法可以改进该算法而无需大量额外的代码?
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;
}
}
【问题讨论】:
-
您是否测量过它会导致性能问题? JList 通常只包含几个元素(否则它们将无法使用),并且计算机每秒执行数十亿条指令。 GUI 大部分时间都在等待用户事件。不要过早优化。此代码简单、易于维护,并且可能不会造成任何损害。
-
JB Nizet:您对过早优化的担忧正是我不想费心实现和测试整个数据结构来优化它的原因!但是,如果在保持代码简单和可维护的同时可以进行其他更改,我完全支持更好的代码以及考虑平衡效率和简单性的练习
-
请问这个有什么用?因为如果您创建某种自动完成算法,您将使用 B-tree 字典获得一些出色的性能。但它对图形表示没有用处,而且比这复杂得多。顺便说一句,如果您的列表已排序,您可以轻松优化您的代码。
-
最可维护的代码是您不必维护的代码 :-) 或者换句话说:不要担心核心 Swing 细节,直到它们咬你。它的工程师可能已经权衡了典型用例的选项。因此,如果他们决定留下一个简单的顺序算法,可以假设它在第一次近似中已经足够好,直到你遇到一个特殊的用例
标签: java performance swing jlist comparator