FixedSizeQueue.java
package io.github.giulong.spectrum.utils;
import lombok.extern.slf4j.Slf4j;
import java.util.PriorityQueue;
@Slf4j
public class FixedSizeQueue<E> extends PriorityQueue<E> {
public FixedSizeQueue() {
super(1);
}
@Override
public boolean add(E e) {
for (E element : this) {
if (element.equals(e)) {
log.debug("Queue already containing {}", e);
return false;
}
}
return super.add(e);
}
public FixedSizeQueue<E> shrinkTo(final int maxSize) {
final int currentSize = size();
log.debug("Shrinking queue. Current size: {}, max size: {}", currentSize, maxSize);
for (int i = 0; i < currentSize - maxSize; i++) { // shrinking the queue to the proper size
poll();
}
return this;
}
}