Java中使用数组的队列实现

时间:2020-02-23 14:37:24  来源:igfitidea点击:

什么是队列?

队列是一种特殊类型的数据结构,旨在在处理和处理元素之前以FIFO(先进先出)的方式保存元素。
它是Java集合框架的一部分。
在本教程中,我们将学习如何使用数组在Java中实现Queue。

基本队列功能

队列必须具有以下功能:

  • enqueue(obj)-将元素插入队列。

  • dequeue()–从队列中删除并返回最近的项目。

  • isEmpty()–如果队列为空,则返回true,否则返回false。

Java中的队列实现

我们可以使用数组实现基本的Queue函数。

这是在Java中实现队列的完整代码。

package com.theitroad.java;

public class MyQueue {

	public static final int DEFAULT_SIZE = 5;

	private Object data[];

	private int index;

	public MyQueue() {
		data = new Object[DEFAULT_SIZE];
	}

	public MyQueue(int size) {
		data = new Object[size];
	}

	public boolean isEmpty() {
		return index == 0;
	}

	public void enqueue(Object obj) throws Exception {
		if (index == data.length - 1) {
			throw new Exception("Queue is full. Dequeue some objects");
		}
		this.data[index] = obj;
		this.index++;
	}

	public Object dequeue() throws Exception {
		if (isEmpty())
			throw new Exception("Queue is empty");
		Object obj = this.data[0];
		for (int i = 0; i < this.index - 1; i++) {
			data[i] = data[i + 1];
		}
		this.index--;
		return obj;

	}
}

重要事项

  • 有两个构造函数–一个用于创建具有默认大小的队列,另一个用于指定队列大小。

  • 我们正在使用私有整数变量" index"来管理队列元素。

  • 我们正在使用对象数组,以便可以在队列中保存任何类型的对象。
    我们也可以在此处使用泛型,但为了避免使程序保持简单,我避免这样做。

  • 如果队列已满,则enqueue()将引发带有适当消息的异常。

  • 如果队列为空,并且我们调用dequeue()函数,则会引发异常。

实施限制队列方法不同步,也不是线程安全的。
如果在多线程环境中使用此实现,则可能会导致数据不一致。

测试程序以检查队列实施

让我们通过对enqueue()和dequeue()函数的一些调用来测试我们的队列实现。

MyQueue queue = new MyQueue();
queue.enqueue("1");
System.out.println(queue.dequeue());

queue.enqueue("2");
queue.enqueue("3");
queue.enqueue("4");
System.out.println(queue.dequeue());

queue.enqueue("5");
queue.enqueue("6");
//queue.enqueue("7");
//queue.enqueue("8");

输出:

1
2

如果取消注释最后两行,则队列将已满,并且将引发异常。

Exception in thread "main" java.lang.Exception: Queue is full. Dequeue some objects
	at com.theitroad.java.MyQueue.enqueue(MyQueue.java:25)
	at com.theitroad.java.MyQueue.main(MyQueue.java:56)