实现一个固定长度的集合队列

在开发中,有时候我们会遇到这样的需求:

对一个集合操作,提前为集合指定最大大小,在我们不断向集合中添加数据的时候,当数据内容超过最大值的时候,自动将最先入队的元素移除队列。

实现方法很简单,代码如下

package com.test.limitqueue;

import java.util.Collection;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.Queue;

/**
 * 实现一个固定长度的集合队列
 *
 * @author SHANHY(365384722@QQ.COM)
 * @date   2015年11月9日
 * @param <E>
 */
public class LimitQueue<E> implements Queue<E> {

	/**
	 * 队列长度,实例化类的时候指定 
	 */
    private int limit;  
      
    Queue<E> queue = new LinkedList<E>();  
      
    public LimitQueue(int limit){  
        this.limit = limit;  
    }  
      
    /**
     * 入队
     */
    @Override  
    public boolean offer(E e){  
        if(queue.size() >= limit){  
            //如果超出长度,入队时,先出队  
            queue.poll();  
        }
        return queue.offer(e);  
    }  
      
    /**
     * 出队 
     */
    @Override  
    public E poll() {  
        return queue.poll();  
    }  
      
    /**
     * 获取队列 
     * 
     * @return
     * @author SHANHY
     * @date   2015年11月9日
     */
    public Queue<E> getQueue(){  
        return queue;  
    }  
      
    /**
     * 获取限制大小
     * 
     * @return
     * @author SHANHY
     * @date   2015年11月9日
     */
    public int getLimit(){  
        return limit;  
    }  
  
    @Override  
    public boolean add(E e) {  
        return queue.add(e);  
    }  
  
    @Override  
    public E element() {  
        return queue.element();  
    }  
  
    @Override  
    public E peek() {  
        return queue.peek();  
    }  
  
    @Override  
    public boolean isEmpty() {  
        return queue.size() == 0 ? true : false;  
    }  
  
    @Override  
    public int size() {  
        return queue.size();  
    }  
  
    @Override  
    public E remove() {  
        return queue.remove();  
    }  
  
    @Override  
    public boolean addAll(Collection<? extends E> c) {  
        return queue.addAll(c);  
    }  
  
    @Override  
    public void clear() {  
        queue.clear();  
    }  
  
    @Override  
    public boolean contains(Object o) {  
        return queue.contains(o);  
    }  
  
    @Override  
    public boolean containsAll(Collection<?> c) {  
        return queue.containsAll(c);  
    }  
  
    @Override  
    public Iterator<E> iterator() {  
        return queue.iterator();  
    }  
  
    @Override  
    public boolean remove(Object o) {  
        return queue.remove(o);  
    }  
  
    @Override  
    public boolean removeAll(Collection<?> c) {  
        return queue.removeAll(c);  
    }  
  
    @Override  
    public boolean retainAll(Collection<?> c) {  
        return queue.retainAll(c);  
    }  
  
    @Override  
    public Object[] toArray() {  
        return queue.toArray();  
    }  
  
    @Override  
    public <T> T[] toArray(T[] a) {  
        return queue.toArray(a);  
    }  
}

package com.test.limitqueue;

/**
 * 测试
 *
 * @author SHANHY(365384722@QQ.COM)
 * @date   2015年11月9日
 */
public class TestQueue {

	public static void main(String[] args) {
		LimitQueue<String> list = new LimitQueue<String>(4);
		
		list.offer("SHANHY");
		System.out.println(list.size());
		list.offer("SHANHY");
		System.out.println(list.size());
		list.offer("SHANHY");
		System.out.println(list.size());
		list.offer("SHANHY");
		System.out.println(list.size());
		list.offer("SHANHY");
		System.out.println(list.size());
		list.offer("SHANHY");
		System.out.println(list.size());
		list.offer("SHANHY");
		System.out.println(list.size());
	}

}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

catoop

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值