频道栏目
首页 > 程序开发 > 软件开发 > Java > 正文
实现一个固定长度的集合队列
2015-11-10 13:57:42         来源:catoop的专栏  
收藏   我要投稿

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

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

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

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 
 */
public class LimitQueue implements Queue {

	/**
	 * 队列长度,实例化类的时候指定 
	 */
    private int limit;  
      
    Queue queue = new LinkedList();  
      
    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 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 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 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[] 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 list = new LimitQueue(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());
	}

}


 

 

点击复制链接 与好友分享!回本站首页
相关TAG标签 队列 长度
上一篇:Java记录 -73- 泛型详解
下一篇:从头认识java-7.5 怎样通过继承扩展接口?
相关文章
图文推荐
文章
推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站