(Java)固定长度队列的实现

来源:互联网 发布:特别好的句子 知乎 编辑:程序博客网 时间:2024/06/07 06:00

  1. package com.gary.util;  
  2.   
  3. import java.util.Collection;  
  4. import java.util.Iterator;  
  5. import java.util.LinkedList;  
  6. import java.util.Queue;  
  7.   
  8. /** 
  9.  * 固定长度队列 
  10.  * @author gary 
  11.  * 
  12.  */  
  13. public class LimitQueue<E> implements Queue<E>{  
  14.     //队列长度  
  15.     private int limit;  
  16.       
  17.     Queue<E> queue = new LinkedList<E>();  
  18.       
  19.     public LimitQueue(int limit){  
  20.         this.limit = limit;  
  21.     }  
  22.       
  23.     /** 
  24.      * 入队 
  25.      * @param e 
  26.      */  
  27.     @Override  
  28.     public boolean offer(E e){  
  29.         if(queue.size() >= limit){  
  30.             //如果超出长度,入队时,先出队  
  31.             queue.poll();  
  32.         }  
  33.         return queue.offer(e);  
  34.     }  
  35.       
  36.     /** 
  37.      * 出队 
  38.      * @return 
  39.      */  
  40.     @Override  
  41.     public E poll() {  
  42.         return queue.poll();  
  43.     }  
  44.       
  45.     /** 
  46.      * 获取队列 
  47.      * @return 
  48.      */  
  49.     public Queue<E> getQueue(){  
  50.         return queue;  
  51.     }  
  52.       
  53.     /** 
  54.      * 获取限制大小 
  55.      * @return 
  56.      */  
  57.     public int getLimit(){  
  58.         return limit;  
  59.     }  
  60.   
  61.     @Override  
  62.     public boolean add(E e) {  
  63.         return queue.add(e);  
  64.     }  
  65.   
  66.     @Override  
  67.     public E element() {  
  68.         return queue.element();  
  69.     }  
  70.   
  71.     @Override  
  72.     public E peek() {  
  73.         return queue.peek();  
  74.     }  
  75.   
  76.     @Override  
  77.     public boolean isEmpty() {  
  78.         return queue.size() == 0 ? true : false;  
  79.     }  
  80.   
  81.     @Override  
  82.     public int size() {  
  83.         return queue.size();  
  84.     }  
  85.   
  86.     @Override  
  87.     public E remove() {  
  88.         return queue.remove();  
  89.     }  
  90.   
  91.     @Override  
  92.     public boolean addAll(Collection<? extends E> c) {  
  93.         return queue.addAll(c);  
  94.     }  
  95.   
  96.     @Override  
  97.     public void clear() {  
  98.         queue.clear();  
  99.     }  
  100.   
  101.     @Override  
  102.     public boolean contains(Object o) {  
  103.         return queue.contains(o);  
  104.     }  
  105.   
  106.     @Override  
  107.     public boolean containsAll(Collection<?> c) {  
  108.         return queue.containsAll(c);  
  109.     }  
  110.   
  111.     @Override  
  112.     public Iterator<E> iterator() {  
  113.         return queue.iterator();  
  114.     }  
  115.   
  116.     @Override  
  117.     public boolean remove(Object o) {  
  118.         return queue.remove(o);  
  119.     }  
  120.   
  121.     @Override  
  122.     public boolean removeAll(Collection<?> c) {  
  123.         return queue.removeAll(c);  
  124.     }  
  125.   
  126.     @Override  
  127.     public boolean retainAll(Collection<?> c) {  
  128.         return queue.retainAll(c);  
  129.     }  
  130.   
  131.     @Override  
  132.     public Object[] toArray() {  
  133.         return queue.toArray();  
  134.     }  
  135.   
  136.     @Override  
  137.     public <T> T[] toArray(T[] a) {  
  138.         return queue.toArray(a);  
  139.     }  
  140.   
  141. }  

  1. package com.gary.test;  
  2.   
  3. import com.gary.util.LimitQueue;  
  4.   
  5. public class TestQueue {  
  6.     public static void main(String[] args) {  
  7.         LimitQueue<String> lqueue = new LimitQueue<String>(3);  
  8.           
  9.         lqueue.offer("1");  
  10.         lqueue.offer("2");  
  11.         lqueue.offer("3");  
  12.         lqueue.offer("4");  
  13.           
  14.         //1因超出队列大小限制已自动出队,输出结果为2,3,4  
  15.         for (String string : lqueue.getQueue()) {  
  16.             System.out.println(string);  
  17.         }  
  18.     }  
  19. }  

原文链接:http://gary0416.iteye.com/blog/1074762