有效地计算记录列表中的项目

时间:2011-07-18 18:28:18

标签: java collections hash map

给定一个记录列表,我试图计算每个作者写的记录数。显而易见的方法是使用地图,其中键是作者的名称,值是递增的计数。但有没有更有效的方法来做到这一点,而不是每次迭代都进行查找?

如果我事先了解作者,我可以为每个作者创建变量并在没有查找的情况下递增它们,然后在我读完输入后最终创建地图。但是我只知道数据中的一些作者。

提前致谢。

4 个答案:

答案 0 :(得分:2)

您的解决方案基于作者姓名到计数的地图是非常好的(如果您使用HashMap,它的总体平均时间复杂度为O(n))。

如果我是你,我会使用这种方法,直到我能证明它不合适(太慢,使用太多内存等),然后才会尝试用解决出现问题的东西替换它。很有可能,那一天永远不会到来。

答案 1 :(得分:0)

使用Java HashMap查找的平均情况将是O(1),这意味着它不会大幅增加您的运行时间。

除非你真的试图从中挤出一切,否则你可能只是过度优化了。

答案 2 :(得分:0)

如果作者数量相对较少,则与记录总数相比,哈希查找将是这种情况下最有效的技术。

如果记录已经排序(或者您有某种btree索引,也是排序结构),则可以使用更多情感算法。

答案 3 :(得分:0)

您可能会发现TObjectIntHashMap比HashMap更有效,但两者都相当有效。您应该能够在几毫秒内扫描100K记录。如果这还不够快,您可以在添加/更新/删除记录时维护计数图,这样您就可以查看它。