队列是设计程序中常用的一种数据结构。它类似日常生活中的排队现象,采用一种被称为
“先进先出”(FIFO)的存储结构。数据元素只能从队尾进入,从队首取出。在队列中,
数据元素可以任意增减,但数据元素的次序不会改变。每当有数据元素从队列中被取出,
后面的数据元素依次向前移动一位。所以,任何时候从队列中读到的都是队首的数据。
根据这些特点,对队列定义了以下六种操作:
enq(x) 向队列插入一个值为x的元素;
deq() 从队列删除一个元素;
front() 从队列中读一个元素,但队列保持不变;
empty() 判断队列是否为空,空则返回真;
clear() 清空队列;
search(x) 查找距队首最近的元素的位置,若不存在,返回-1。
Vector类是JAVA中专门负责处理对象元素有序存储和任意增删的类,因此,用Vector
可以快速实现JAVA的队列类。
public class Queue extends java
public synchronized void enq(Object x) {
super.addElement(x);
}
public synchronized Object deq() {
/* 队列若为空,引发EmptyQueueException异常 */
if( this.empty() )
throw new EmptyQueueException();
Object x = super.elementAt(0);
super.removeElementAt(0);
return x;
}
public synchronized Object front() {
if( this.empty() )
throw new EmptyQueueException();
return super.elementAt(0);
}
public boolean empty() {
return super.isEmpty();
}
public synchronized void clear() {
super.removeAllElements();
}
public int search(Object x) {
return super.indexOf(x);
}
}
public class EmptyQueueException extends java
}
以上程序在JDK1.1.5下编译通过
分享到:
相关推荐
本篇文章将详细介绍如何利用Java中的`Vector`类来实现一个具有先进先出特性的队列类`Queue`。队列是一种特殊的线性表,只允许在一端进行插入操作,在另一端进行删除操作。通常,我们称允许插入的一端为“队尾”,...
java2里面没有提供标准类对队列的支持,我就编写了一个用java实现的队列类。可以供参考。
1. 类声明:声明一个类,比如`MyQueue`,并继承`java.util.Queue`接口。 2. 队列元素的存储结构:可以使用数组或链表。数组实现简单,但插入和删除效率较低;链表插入和删除快,但内存分配较多。 3. `add()`方法:将...
在Java中,我们可以使用ArrayList或ArrayDeque类来创建一个顺序队列。SqQueueCycle可能是一个循环队列,这意味着当队列满时,新的元素会覆盖旧的元素,形成一个循环。循环队列可以避免在队列满时进行数组扩容操作,...
1. 编写程序,使用两个线程,一个队列, 其中一个线程从键盘读取数据,放入到队列中,直到读取的数据是字符串quit则结束,线程的任务就是循环读取数据直到特定的字符串quit。另外一个线程,不断的从队列中读取数据...
要使用Java连接到MSMQ,你需要一个支持MSMQ的JMS提供者,例如Apache ActiveMQ或IBM WebSphere MQ。这些提供者通常会提供特定的适配器或者驱动程序来与MSMQ交互。 创建消息队列的步骤如下: 1. **安装MSMQ服务**:...
综上所述,编写一个能够复制包含多级子目录和文件的Java应用程序需要理解文件和目录操作、递归、异常处理、日期格式化以及可能的用户交互设计。通过合理组合这些知识点,可以构建出一个功能完整的目录复制工具。
Java中的`java.util.PriorityQueue`类为我们提供了实现优先队列的功能。 首先,让我们深入理解`PriorityQueue`的基本概念。`PriorityQueue`是基于二叉堆(一种自平衡的树形数据结构)实现的,它不保证队列的顺序,...
在计算机科学中,数据结构是组织和管理大量数据的关键...总的来说,理解和熟练运用Java中的队列、链表和栈对于编写高效的代码至关重要。通过深入学习和实践,你可以更好地解决复杂的数据存储和处理问题,提升编程能力。
为了实现一个线程安全的队列,我们可以使用`ConcurrentLinkedQueue`,它是线程安全且无阻塞的队列,适用于高并发场景。另外,`LinkedBlockingQueue`是另一个线程安全的选择,它提供了阻塞操作,当队列为空时,取元素...
[工具类] 一个压缩工具类.java.txt [工具类] 用java编写简单UDP网络通信程序 .java.txt [工具类] 中文验证.jsp.txt [工具类] 日期DateUtil.java [工具类] 文件FileUtil.java [工具类] 通信客户端simpleClient.java ...
Java队列是Java集合框架中的一个关键组成部分,主要用于在多个线程之间同步数据传输或实现异步处理。队列遵循先进先出(FIFO)的原则,即最早添加到队列中的元素将首先被处理。本教程将深入探讨如何在Java中使用队列...
[工具类] 一个压缩工具类.java.txt [工具类] 用java编写简单UDP网络通信程序 .java.txt [工具类] 中文验证.jsp.txt [工具类] 日期DateUtil.java [工具类] 文件FileUtil.java [工具类] 通信客户端simpleClient.java ...
总的来说,这个项目为学习者提供了一个动手实践多级反馈队列调度算法的平台,通过编写和分析代码,加深对操作系统调度原理的理解,有助于提升编程和问题解决能力。同时,这也是一个很好的案例,展示了如何将理论知识...
Java是一种广泛使用的面向对象的编程语言,其...总之,Java中的队列是一个强大的工具,可以用于处理各种数据流和任务调度。在Eclipse中,你可以借助Java的标准库和GUI组件实现各种队列功能,以满足不同应用场景的需求。
总的来说,这个Java编写的“学生会投票系统”是一个融合了数据结构、面向对象编程和多线程技术的实战项目,对于学习和提升Java编程技能,尤其是数据结构和并发编程的理解,具有很高的价值。通过实际操作和调试,学生...
在Java中,创建一个队列可以借助数组的特性,即头部插入元素,尾部删除元素。为了支持动态扩容,当队列满时,通常会创建一个新的、容量更大的数组,并将旧数组的所有元素复制到新数组中。描述中提到的扩容策略是将...
总之,Java编写的类QQ聊天系统涵盖了网络编程、多线程、数据交换、并发控制、数据库操作、用户界面设计、消息队列、安全性以及设计模式等多个关键知识点,需要开发者具备扎实的Java基础和良好的编程实践。