FIFO( First Input First Output)簡單說就是指先進先出.
- 類名:Container<T>
- 方法: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();
}
}