「配列」構造に基づく「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();
	}
}

 

おすすめ

転載: blog.csdn.net/qianzhitu/article/details/102997182