Mav*_*rik 105
实际上LinkedHashMap完全符合你的要求.您需要覆盖该removeEldestEntry方法.
具有最多10个元素的队列示例:
  queue = new LinkedHashMap<Integer, String>()
  {
     @Override
     protected boolean removeEldestEntry(Map.Entry<Integer, String> eldest)
     {
        return this.size() > 10;   
     }
  };
如果"removeEldestEntry"返回true,则从地图中删除最旧的条目.
Roa*_*tad 18
我只是这样实现了一个固定大小的队列:
public class LimitedSizeQueue<K> extends ArrayList<K> {
    private int maxSize;
    public LimitedSizeQueue(int size){
        this.maxSize = size;
    }
    public boolean add(K k){
        boolean r = super.add(k);
        if (size() > maxSize){
            removeRange(0, size() - maxSize);
        }
        return r;
    }
    public K getYoungest() {
        return get(size() - 1);
    }
    public K getOldest() {
        return get(0);
    }
}
mor*_*itz 17
Java语言和运行时中没有现有的实现.所有队列都扩展了AbstractQueue,其文档明确指出,向完整队列添加元素始终以异常结束.最好(并且非常简单)将Queue包装到您自己的类中以获得所需的功能.
再一次,因为所有队列都是AbstractQueue的子代,所以只需将其作为内部数据类型使用,您应该在几乎没有时间运行灵活的实现:-)
更新:
如下所述,有两个可用的开放实现(这个答案很老,伙计们!),详情请参阅此答案.
Leo*_*eon 10
public class CircularQueue<E> extends LinkedList<E> {
    private final int capacity;
    public CircularQueue(int capacity){
        this.capacity = capacity;
    }
    @Override
    public boolean add(E e) {
        if(size() >= capacity)
            removeFirst();
        return super.add(e);
    }
}
使用方法及测试结果:
public static void main(String[] args) {
    CircularQueue<String> queue = new CircularQueue<>(3);
    queue.add("a");
    queue.add("b");
    queue.add("c");
    System.out.println(queue.toString());   //[a, b, c]
    String first = queue.pollFirst();       //a
    System.out.println(queue.toString());   //[b,c]
    queue.add("d");
    queue.add("e");
    queue.add("f");
    System.out.println(queue.toString());   //[d, e, f]
}
这就是我用Queue包裹做的LinkedList,固定尺寸我在这里给的是2;
public static Queue<String> pageQueue;
pageQueue = new LinkedList<String>(){
            private static final long serialVersionUID = -6707803882461262867L;
            public boolean add(String object) {
                boolean result;
                if(this.size() < 2)
                    result = super.add(object);
                else
                {
                    super.removeFirst();
                    result = super.add(object);
                }
                return result;
            }
        };
....
TMarket.pageQueue.add("ScreenOne");
....
TMarket.pageQueue.add("ScreenTwo");
.....