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)

