网站建设相关制度,网站建设管理维护责任书,桂林漓江在哪个位置,苏州公司网页制作一、代码实现
通过封装 PriorityQueue 实现#xff0c;PriorityQueue 本质上是完全二叉树实现的小根堆#xff08;相对来说#xff0c;如果比较器反向比较则是大根堆#xff09;。
public class TopNUtilE extends ComparableE {private final PriorityQ…一、代码实现
通过封装 PriorityQueue 实现PriorityQueue 本质上是完全二叉树实现的小根堆相对来说如果比较器反向比较则是大根堆。
public class TopNUtilE extends ComparableE {private final PriorityQueueE priorityQueue;private final int n;/*** 构造 Top-N*/public TopNUtil(int size) {if (size 0) {throw new IllegalArgumentException(Top-N size must be a positive number);}this.priorityQueue new PriorityQueue(size);this.n size;}/*** 向 Top-N 中插入元素*/public void add(E e) {if (priorityQueue.size() n) {priorityQueue.add(e);return;}E head priorityQueue.peek();if (head ! null e.compareTo(head) 0) {return;}priorityQueue.poll();priorityQueue.add(e);}/*** 将 Top-N 转为从大到小排序的 List*/public ListE toSortedArrayList() {ListE tempList new ArrayList(priorityQueue);tempList.sort(Collections.reverseOrder());return tempList;}
}二、使用示例
class TopNUtilTest {Testvoid test() {ListCountDTO list new ArrayList();TopNUtilCountDTO top new TopNUtil(3);// 生成 10 个随机的 CountDTOfor (int i 0; i 10; i) {CountDTO dto new CountDTO();dto.setOrderPriceSum(BigDecimal.valueOf(Math.random() * 100));list.add(dto);}System.out.println(所有的 CountDTO 值:);for (CountDTO dto : list) {System.out.print(dto.getOrderPriceSum());System.out.print( );}System.out.println();// 将列表中的元素添加到 TopNUtilfor (CountDTO dto : list) {top.add(dto);}// 获取 TopNUtil 中的元素列表ListCountDTO topList top.toSortedArrayList();// 确保列表的大小不超过 3assertEquals(3, topList.size());// 打印 Top 3 元素的 CountDTO 值System.out.println(Top 3 CountDTO 值:);for (CountDTO dto : topList) {System.out.println(dto.getOrderPriceSum());}}
}