package org.transgalactica.web.recent; import java.io.Serializable; import java.util.AbstractQueue; import java.util.Deque; import java.util.Iterator; import java.util.LinkedList; import java.util.Queue; /** * Pile cyclique FIFO, pas de doublons. * * @author Thierry */ public class CyclicMostRecentQueue<L extends RecentLabel<?>> extends AbstractQueue<L> implements Queue<L>, Serializable { private static final long serialVersionUID = 1L; private final Deque<L> items; private final int sizeMax; public CyclicMostRecentQueue() { this(5); } public CyclicMostRecentQueue(int sizeMax) { this.sizeMax = sizeMax; items = new LinkedList<>(); } @Override public boolean offer(L label) { if (items.contains(label)) { items.remove(label); } if (size() >= sizeMax) { items.removeLast(); } return items.offerFirst(label); } @Override public L poll() { return items.removeLast(); } @Override public L peek() { return items.getLast(); } @Override public Iterator<L> iterator() { return items.iterator(); } @Override public int size() { return items.size(); } }