基於”數組”結構寫一個”FIFO”算法的隊列容器

FIFO( First Input First Output)簡單說就是指先進先出.

  1. 類名:Container<T>
  2. 方法:add(T t),take()

實現分析:添加操作

實現分析:取操作實現

/**
 * 創建一個容器(隊列容器)
 * 1)數據結構:數組(線性結構)
 * 2)算法:FIFO
 */
class ArrayContainer<T>{
    /**通過數組存儲元素*/
	private Object[] array;
	/**通過size屬性記錄有效元素個數(
	  實際存儲的我們放入的元素)*/
	private int size;
	public ArrayContainer() {
		this(16);
	}
	public ArrayContainer(int cap) {
		if(cap==0)
		throw new IllegalArgumentException("你傳入的參數無效");
		array=new Object[cap];
	}
	/**向容器添加數據:永遠添加在size位置*/
	public void add(T t) {
	 //1.判定容器是否已滿,滿了擴容
	 if(size==array.length) {
	   //創建新數組,其長度爲原數組長度兩倍
	   //將原數組數據複製到新數組
	   //讓原數組原先的引用指向新的數組
	   array=Arrays.copyOf(array,2*array.length);
	 }
	 //2.將數據放在size位置
	 array[size]=t;
	 //3.有效元素個數加1
     size++;	
	}
	
	/**從容器獲取數據:永遠從第0個位置開始*/
	@SuppressWarnings("unchecked")
	public T take() {
		//1.判定容器是否爲空
		if(size==0)
		throw new NoSuchElementException("沒有元素");
		//2.取數據
		Object obj=array[0];
		//3.移動元素
		System.arraycopy(array,//從哪個數組拷貝
				1,//從哪個位置複製
				array,//放到哪個數組
				0,//從哪開始放
				size-1);//放多少
	    //4.有效元素個數減1
		size--;
		//5.size位置元素設置爲null(可選)
		array[size]=null;
		//6.返回元素
		return (T)obj;
	}
	public int size() {
		return size;
	}
	
	@Override
	public String toString() {//不要求寫
	     if (size==0)return "[]";
	     StringBuilder sb = new StringBuilder();
	     sb.append('[');
	     for (int i=0;i<size;i++) {
	         sb.append(array[i]).append(",");
	     }
	     sb.deleteCharAt(sb.lastIndexOf(","));
	     return sb.append("]").toString();
	}
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章