我有一个问题陈述,想知道在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)
如果不迭代每个值,就无法获得最大值,除非它们具有某种预定义顺序,您可以将其用于优化。
我会使用Map积累最高值,将其与之前存储的值进行比较,这样您就可以通过记录在一次迭代中获得最高值。
答案 1 :(得分:0)
为您的班级制作比较器。将对象存储在TreeSet中。使用TreeSet.descendingIterator显示具有最高时间戳的n个对象。
请注意,只有在时间戳保证唯一的情况下,此解决方案才有效。否则使用PriorityQueue。
答案 2 :(得分:0)
编写比较器并使用
Collections.sort(list, Collections.reverseOrder(yourComparator));
并始终从列表中获取第一个元素。
答案 3 :(得分:0)
我建议 TreeSet ,树集是可排序的,可以根据你的需要进行导航。不要忘记使用比较器,它提供比较功能,用于识别最小值,最大值,排序。
答案 4 :(得分:0)
如果只想要最大值,则无需对整个列表进行排序。相反,您可以使用冒泡排序,在一次迭代中,您将获得最高值(复杂度为O(n))。 请注意,TreeSet和Collections.sort非常昂贵,因为它们会尝试对整个集合进行排序,这在您的案例中并不是必需的。