0

我有一个问题陈述,想知道在 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中最好的方法是什么。遍历每条记录看起来很乏味。任何帮助都会很棒。

4

5 回答 5

0

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

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

于 2013-10-07T05:35:33.637 回答
0

编写一个比较器并使用

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

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

于 2013-10-07T05:51:37.847 回答
0

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

于 2013-10-07T05:53:34.863 回答
0

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

请注意,仅当时间戳保证唯一时,此解决方案才有效。否则使用 PriorityQueue。

于 2013-10-07T05:37:47.383 回答
0

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

于 2013-10-07T05:57:46.437 回答