我需要在大量数据中找到 N 个最大的元素。
我有:
- 外部数据库(Cassandra)中数亿项的集合
遍历这些项目并找到具有最大价值的项目的作业
Item largest = null; // Page through big data List<Item> items = getNextPage(pageSize); while (items.size() > 0) { // Update largest item based on values from current page for (Item current : items) { if (largest == null || largest.getValue() < current.getValue()) { largest = current; } } // Move to next page items = getNextPage(pageSize); }
我需要:
- 扩展此作业以容纳 N(假设为 100)具有最高值的元素
我的做法:
我在考虑像固定大小的优先级队列
class PQsort implements Comparator<Item> { public int compare(Item one, Item two) { return two.getValue() - one.getValue(); } } PriorityQueue<Item> pq = new PriorityQueue<Item>(101, new PQsort()); ...while...for... pq.offer(current); if (pq.size() == 101) { // Remove the tail somehow } ...
去除尾部:去除优先队列的尾部元素
这项任务的最佳解决方案是什么?