我正在计算大量可能的算法组合。为了对这些组合进行排序,我使用双值对它们进行评分,然后将其存储在PriorityQueue中。当前,该队列中大约有20万个项目,这在内存方面非常重要。因此,我只需要说列表中所有项目中最好的1000或100。
因此,我刚刚开始问自己,是否有办法在Java中使用固定大小的优先级队列。我应该表现得像这样:
该项目是否比已存储的项目中的一项更好?如果是,则将其插入相应的位置,并丢掉额定值最小的元素。
有人有主意吗?再次非常感谢!
马可
最佳答案
que.add(d);
if (que.size() > YOUR_LIMIT)
que.poll();
还是我误解了你的问题?
编辑:忘了提及这一点,您可能必须反转您的comparTo函数,因为它会丢弃每个循环中优先级最高的函数。 (如果a为“更好”,b进行比较(a,b)应返回一个正数。
为了保持最大数量的示例,请使用以下格式:
public int compare(Double first, Double second) {
// keep the biggest values
return first > second ? 1 : -1;
}