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

com.yomahub.liteflow.util.BoundedPriorityBlockingQueue Maven / Gradle / Ivy

The newest version!
package com.yomahub.liteflow.util;

import java.util.*;
import java.util.concurrent.PriorityBlockingQueue;

public class BoundedPriorityBlockingQueue extends PriorityBlockingQueue {

	private static final long serialVersionUID = -1;

	// 容量
	private final int capacity;

	private final Comparator comparator;

	public BoundedPriorityBlockingQueue(int capacity) {
		this(capacity, null);
	}

	/**
	 * 构造
	 * @param capacity 容量
	 * @param comparator 比较器
	 */
	public BoundedPriorityBlockingQueue(int capacity, final Comparator comparator) {
		super(capacity, (o1, o2) -> {
			int cResult;
			if (comparator != null) {
				cResult = comparator.compare(o1, o2);
			}
			else {
				@SuppressWarnings("unchecked")
				Comparable o1c = (Comparable) o1;
				cResult = o1c.compareTo(o2);
			}

			return -cResult;
		});
		this.capacity = capacity;
		this.comparator = comparator;
	}

	/**
	 * 加入元素,当队列满时,淘汰末尾元素
	 * @param e 元素
	 * @return 加入成功与否
	 */
	@Override
	public boolean offer(E e) {
		if (size() >= capacity) {
			E head = peek();
			if (this.comparator().compare(e, head) <= 0) {
				return false;
			}
			// 当队列满时,就要淘汰顶端队列
			poll();
		}
		return super.offer(e);
	}

	/**
	 * 添加多个元素
* 参数为集合的情况请使用{@link PriorityQueue#addAll} * @param c 元素数组 * @return 是否发生改变 */ public boolean addAll(E[] c) { return this.addAll(Arrays.asList(c)); } /** * @return 返回排序后的列表 */ public ArrayList toList() { final ArrayList list = new ArrayList<>(this); list.sort(comparator); return list; } @Override public Iterator iterator() { return toList().iterator(); } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy