ArrayQueue实现

来源:互联网 发布:单片机复位键封装 编辑:程序博客网 时间:2024/04/27 15:14

ArrayQueue的实现

package honbaa_queue;

 

import java.util.Arrays;

import java.util.Iterator;

 

public class ArrayQueue<T> implements Queue<T>,Iterable<T>{

 

    private T[]container;

    private int head;//指向对头元素

    private int tail;//指向队尾元素

    private final int DEFAULT_CAPACITY=10;

    private final int  INCREMENT=10;

   

   

   

   

    public ArrayQueue() {

       container = (T[])new Object[DEFAULT_CAPACITY];

       head = -1;//由于数组中没有对象

       tail = -1;   

    }

 

    @Override

    public void enQueue(T element) {

       if(size()==container.length)

           expandCapacity();

       //放心的入队

       container[tail+1]=element;

       //改变tail指针

       tail++;

       //改变head,头只在0位置

       head = 0;

      

    }

 

    private void expandCapacity() {

       container = Arrays.copyOf(container,DEFAULT_CAPACITY+INCREMENT);

    }

 

    @Override

    public T outQueue() {

       //判空

       if(isEmpty())

           try {

              throw new Exception("the queueis emtpy!");

           } catch (Exceptione) {

              // TODO Auto-generatedcatch block

              e.printStackTrace();

           }

       //放心出队,然后后面的元素向前移动

       T out = container[head];

       //移动

       for(inti=1;i<=tail;i++)

           container[i-1] =container[i];

       //tail1head还是0

       tail--;

       returnout;

    }

 

    @Override

    public int size() {

       if(tail==head &&head==-1)

           return 0;

       else

           returntail-head+1;

    }

 

    @Override

    public boolean isEmpty() {

       if(size()==0)

           return true;

       else

           return false;

    }

 

    @Override

    public Iterator<T> iterator() {

       return new ArrayQueueIterator();

    }

    private class ArrayQueueIterator<T> implementsIterator<T>{

       //从对头遍历到队尾

       private int currentPos=-1;

       @Override

       public boolean hasNext() {

           if(currentPos <tail)//如果当前位置小于tail那一定还有下一个啊

              return true;

           else

              return false;

       }

 

       @Override

       public T next() {

           currentPos++;

           return(T) container[currentPos];

       }     

    }

   

    public StringtoString(){

       StringBuilder sb =new StringBuilder();

       Iterator it = iterator();

       while(it.hasNext())

           sb.append(it.next()+" ");

       returnsb.toString();

    }

}

0 0
原创粉丝点击