All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.star.additional.BoundedPriorityQueue Maven / Gradle / Ivy

package com.star.additional;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
import java.util.List;
import java.util.Objects;
import java.util.PriorityQueue;

/**
 * 有界优先队列
* * 应用在啥场景没直观印象 * * @author xiaoleilu * */ public class BoundedPriorityQueue extends PriorityQueue { /** * */ private static final long serialVersionUID = -7611383337878251833L; /** * 容量 */ private transient int capacity; /** * 比较器 */ private transient Comparator comparator; /** * 构造方法 * * @param capacity * 队列大小 */ public BoundedPriorityQueue(final int capacity) { this(capacity, null); } /** * 构造方法 * * @param capacity * 队列大小 * @param comparator * 比较器 */ public BoundedPriorityQueue(final int capacity, final Comparator comparator) { super(capacity, new Comparator() { /** * 比较 */ @Override public int compare(final E obj1, final E obj2) { int cResult = 0; if (Objects.isNull(comparator)) { @SuppressWarnings("unchecked") final Comparable o1c = (Comparable) obj1; cResult = o1c.compareTo(obj2); } else { cResult = comparator.compare(obj1, obj2); } return -cResult; } }); this.capacity = capacity; this.comparator = comparator; } /** * 入队列,当队列满时,淘汰末尾元素 * * @param ele * 元素 * * @return 成功与否 */ @Override public boolean offer(final E ele) { boolean result = false; if (size() >= capacity) { final E head = peek(); if (this.comparator().compare(ele, head) <= 0) { result = true; } // 当队列满时,就要淘汰顶端队列 poll(); } return result ? result : super.offer(ele); } /** * 多个元素如队列 * * @param array * 多个元素 * @return 成功与否 */ @SuppressWarnings("unchecked") public boolean addAll(final E... array) { return this.addAll(Arrays.asList(array)); } /** * * @return 返回排序后的列表 */ public List toList() { final ArrayList list = new ArrayList(this); Collections.sort(list, comparator); return list; } /** * @return 返回迭代器 */ @Override public Iterator iterator() { return toList().iterator(); } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy