3 回答
TA贡献1802条经验 获得超4个赞
Java语言和运行时中没有现有的实现。所有Queue都扩展了AbstractQueue,其文档明确指出,将元素添加到完整队列总是以异常结束。最好(非常简单)将Queue包装到您自己的类中,以具有所需的功能。
再一次,由于所有队列都是AbstractQueue的子级,因此只需将其用作内部数据类型,您就应该有一个灵活的实现,它几乎可以在任何时间运行:-)
更新:
如下所述,有两种开放的实现方式(伙计们,这个答案已经很老了!),有关详细信息,请参见此答案。
TA贡献1785条经验 获得超4个赞
实际上,LinkedHashMap完全可以满足您的需求。您需要重写该removeEldestEntry方法。
最多包含10个元素的队列的示例:
queue = new LinkedHashMap<Integer, String>()
{
@Override
protected boolean removeEldestEntry(Map.Entry<Integer, String> eldest)
{
return this.size() > 10;
}
};
如果“ removeEldestEntry”返回true,则将最旧的条目从地图中删除。
TA贡献1921条经验 获得超9个赞
我只是这样实现了一个固定大小的队列:
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);
}
}
添加回答
举报