用java查找max记录

用java查找max记录,java,performance,Java,Performance,我有一个问题陈述,想知道用java解决这个问题的最佳方法 我有大量的记录(比如说100万条),这些记录有时间戳和值。 我必须得到每15分钟的输出,这是最高值 E.g. Timestamp -07-10-2013 10.15 - 14 -07-10-2013 10.18 - 13 -07-10-2013 10.19 - 18 -07-10-2013 10.30 - 16 -07-10-2013 10.34 - 10 -07-10-2013 10.38 - 17 -07-10-2013 10.42

我有一个问题陈述,想知道用java解决这个问题的最佳方法

我有大量的记录(比如说100万条),这些记录有时间戳和值。 我必须得到每15分钟的输出,这是最高值

E.g.
Timestamp
-07-10-2013 10.15 - 14
-07-10-2013 10.18 - 13
-07-10-2013 10.19 - 18
-07-10-2013 10.30 - 16
-07-10-2013 10.34 - 10
-07-10-2013 10.38 - 17
-07-10-2013 10.42 - 30
-07-10-2013 10.54 - 23
-07-10-2013 10.57 - 44
输出

-07-10-2013 10.19 - 18
-07-10-2013 10.42 - 30
-07-10-2013 10.57 - 44
用java做这件事的最好方法是什么。遍历每条记录看起来是一件乏味的事情。
任何帮助都会很好。

如果不对每个值进行迭代,就无法获得最大值,除非它们具有某种预定义的顺序,可以用于优化


我会使用Map来累积最高值,将其与以前存储的值进行比较,这样您就可以通过记录在一次迭代中获得最高值。

为您的类制作一个比较器。将对象存储在树集中。使用TreeSet.DegendingIterator显示具有最高时间戳的n个对象


注意,只有当时间戳被保证是唯一的时,这个解决方案才是好的。否则请使用PriorityQueue。

编写一个比较器并使用

Collections.sort(list,Collections.reverseOrder(yourcomarator))


并始终从列表中获取第一个元素。

我建议使用树集,树集是可排序和可导航的,这是您所需要的。不要忘记使用比较器,它提供比较功能,用于识别最小值、最大值和排序

如果只需要最大值,则无需对整个列表进行排序。相反,您可以使用冒泡排序,在一次迭代中,您将获得最高的值(复杂性为O(n))。
请注意,TreeSet和Collections.sort非常昂贵,因为它们试图对整个集合进行排序,而这在您的案例中是不需要的。

为什么您认为迭代很繁琐?它可能是编码和时间复杂度方面最简单的。你写了多少真实世界的代码?可能有一百万个数据点。所以我想知道最好的方法你是如何得到数据的?如果它来自数据库,您可以通过适当的SQL查询来实现这一点。最好用SQL来处理,然后用Java传递resultset如果有那么多“记录”,我会使用最适合这项工作的工具:数据库。将问题转化为查询。