2013-10-07 39 views
0

我有一个问题陈述,想知道在java中解决这个问题的最佳方法。用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中做的最好的方式。迭代每条记录看起来很乏味。 任何帮助将是伟大的。

+0

你为什么认为迭代是乏味的?这可能是编码和时间复杂性最简单的。你写了多少真实世界的代码? –

+0

可能有100万个数据点。所以我想知道最好的方法 – user1630693

+0

你是如何得到这些数据的?如果它来自数据库,则可以通过适当的SQL查询来实现。 – Jules

回答

0

除非每个值都有迭代,否则无法获得最大值,除非它们具有某种预定义顺序,您可以使用该顺序进行优化。

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

0

为你的班级做一个比较。将对象存储在TreeSet中。使用TreeSet.descendingIterator来显示具有最高时间戳的n个对象。

请注意,只有确保时间戳是唯一的,此解决方案才有效。否则使用PriorityQueue。

0

写一个比较器和使用

Collections.sort(list, Collections.reverseOrder(yourComparator));

,并从列表中的第一个元素始终。

0

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

0

如果您只需要最大值,则不需要对整个列表进行排序。相反,您可以使用Bubble Sort,并且在一次迭代中,您将获得最高值(复杂度为O(n))。 请注意,TreeSet和Collections.sort相当昂贵,因为它们尝试对您的案例中不需要的整个集合进行排序。