【发布时间】:2019-09-23 02:14:15
【问题描述】:
我正在将我创建的类中的项目插入到链接列表中,但在添加之前我必须找到正确的索引点将它们插入(因此项目按字母顺序排列)。
我有一些工作代码,但效率低得离谱,在一台半体面的机器上花费 5 分钟来添加 10000 个项目。我想知道是否有更有效的方法来做到这一点。
到目前为止,我设法让它工作的唯一方法就是这样。任何其他方法最终都会错误地添加项目(我猜没有正确添加到列表的末尾)
在显示的代码中,我将一个名称(连同其他两个变量,它们不相关并且已经是 itemClass 的一部分)传递到以下代码中
if (llist.size() == 0) {
llist.add(itemClass);
}
else if (llist.get(0).name.compareTo(name)>0) {
llist.add(0, itemClass);
}
else if (llist.get(llist.size() - 1).name.compareTo(name) < 0) {
llist.add(llist.size(), itemClass);
}
else {
int i = 0;
while (llist.get(i).name.compareTo(name) < 0) {
i++;
}
llist.add(i, itemClass);
}
目前,这完全符合预期,但如前所述,需要非常长的时间。我只是期待更快的东西,可能会有很大的差距。
【问题讨论】:
-
重新考虑后,添加二分搜索可能会花费一半(?)时间;但我不知道如何实现这一点。想法?
-
您是否特别需要使用 LinkedList ?
-
是的,很遗憾。在这种情况下似乎违反直觉,但这是唯一的方法
-
你不能使用 TreeSet 然后将其内容复制到 LinkedList 中吗?那会更快。
标签: java linked-list processing-efficiency