【发布时间】:2010-11-24 10:47:04
【问题描述】:
我在大量数据上使用 java。
[我尽量简化问题]
实际上我有一个小类(元素),其中包含一个 int KEY 和一个双 WEIGHT(带有 getter 和 setter)。
我从一个文件中读取了很多这样的对象,我必须得到最好(最重)的 M 个对象。
实际上我正在使用带有 Comparator 的 PriorityQueue 来比较两个元素,它可以工作,但是太慢了。
你知道(我知道你知道)有什么更快的方法吗?
谢谢
【问题讨论】:
-
您是否对此代码运行了分析器?你的比较器是怎么写的?
-
我强烈建议您分析您的代码并找出究竟是什么导致您的代码运行得比您喜欢的慢。没有显示代码,也没有其他信息,很难回答这个问题。哪个部分运行缓慢?
-
旁注:您可以将比较器简化为 return i.getValue()-j.getValue();
-
正如 Tnay 所指出的,如果没有进一步的分析信息,您就是“在没有表示的情况下进行优化” - 即在不知道问题实际在哪里的情况下进行优化。我建议您购买一个好的分析器 - 我过去使用 YourKit 取得了很大的成功(500-800% 的收益),尽管还有其他 Java 分析器。
-
使用减法来实现双精度比较器似乎非常冒险。比较器结果被强制转换为 int,因此许多(大多数?全部?)权重之间的显着差异可能被强制为零。
标签: java performance sorting collections priority-queue