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)