Escriba un contenedor de cola con el algoritmo "FIFO" basado en la estructura de "matriz"

FIFO (Primera entrada, primera salida) simplemente significa primero en entrar, primero en salir.

  1. Nombre de clase: contenedor <T>
  2. Método: agregar (T t), tomar ()

Análisis de implementación: agregar operaciones

Análisis de implementación: poner en funcionamiento para lograr

/**
 * 创建一个容器(队列容器)
 * 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();
	}
}

 

Supongo que te gusta

Origin blog.csdn.net/qianzhitu/article/details/102997182
Recomendado
Clasificación