實現一個固定長度的集合隊列
在開發中,有時候我們會遇到這樣的需求:
對一個集合操作,提前為集合指定最大大小,在我們不斷向集合中添加資料的時候,當資料內容超過最大值的時候,自動將最先入隊的元素移除隊列。
實現方法很簡單,代碼如下
package com.test.limitqueue;import java.util.Collection;import java.util.Iterator;import java.util.LinkedList;import java.util.Queue;/** * 實現一個固定長度的集合隊列 * * @author SHANHY([email protected]) * @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([email protected]) * @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());}}