Java实现队列(通过自定义数组实现,可以自动扩容)

Java实现队列(可以自动扩容)


先声明接口interface Queue<E>

//适用泛型
public interface Queue<E> {

	int getSize();
	boolean isEmpty();
	void enqueue(E e);//入队
	E dequeue();//出队
	E getFront();//获得队首元素
}

class ArrayQueue<E>实现接口,测试也放在里面了

这里是通过自定义的Array类里的方法来实现Queue接口,进而形成这个ArrayQueue类
自定义的Array类:点我跳转

/**
 * @author yinglongwu
 */
//这里通过自定义的Array类实现Queue接口,进而形成这个ArrayQueue,
//并且也可以自动扩容
public class ArrayQueue<E> implements Queue<E> {

	private Array<E> array;
	
	public ArrayQueue(int capacity){
		array = new Array<E>(capacity);
	}
	
	public ArrayQueue() {
		array = new Array<E>();//使用Array类里的无参构造
	}
	
	//获取队列的最大容量
	public int getCapacity() {
		return array.getCapacity();
	}

	//对接口中的方法进行重写
	@Override
	public int getSize() {
		return array.getSize();
	}

	@Override
	public boolean isEmpty() {
		return array.isEmpty();
	}

	@Override
	public void enqueue(E e) {//入队
		array.addLast(e);
	}

	@Override
	public E dequeue() {//出队
		return array.removeFirst();
	}

	@Override
	public E getFront() {//查看队首元素
		return array.getFirst();
	}
	
	//对toString方法进行重写,方便输出队列的基本信息
	@Override
	public String toString() {
		StringBuilder res = new StringBuilder();
		res.append("Queue: ");
		res.append("front [");//表明左侧是队首
		for (int i = 0; i < array.getSize(); i++) {
			res.append(array.get(i));
			if (i != array.getSize()-1) {
				res.append(", ");
			}
		}
		res.append("] tail");//表明右侧是队尾
		return res.toString();
	}
	
	//测试 ArrayQueue
	public static void main(String[] args) {
		
		ArrayQueue<Integer> queue = new ArrayQueue<Integer>();

		//包装类和其对应的基本数据类型可以自动转换
		for (int i = 0; i < 10; i++) {
			queue.enqueue(i);//入队
			System.out.println(queue);
			
			if (i%3==2) {//每三个元素出队一次
				queue.dequeue();
				System.out.println(queue);
			}
		}
	}
}

输出结果
在这里插入图片描述

发布了318 篇原创文章 · 获赞 44 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_43594119/article/details/105234614