`
xurichusheng
  • 浏览: 345027 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

java 队列

    博客分类:
  • java
阅读更多

 

java 队列

 

 

import java.util.Arrays;

/**
* 
* <队列>
* <先进先出FIFO>
* 
* @author  
* @version  [版本号, 2011-9-20]
* @see  [相关类/方法]
* @since  [产品/模块版本]
*/
public class SequenceQueue<T>{
    //初始化容量
    private int DEFAULT_INIT_SIZE = 10;
    
    //数组的长度
    private int capacity;
    
    //定义一个数组,用于保存顺序栈的元素
    private Object[] elementData;
    
    //队头
    private int front = 0;
    
    //队尾
    private int rear = 0;
    
    /**
     * <以默认数组长度创建顺序队列>
     */
    public SequenceQueue(){
        this.capacity = DEFAULT_INIT_SIZE;
        elementData = new Object[capacity];
    }
    
    /**
     * <以一个初始化元素创建顺序队列>
     * @param element 指定顺序队列中第一个元素
     */
    public SequenceQueue(T element){
        this();
        elementData[0] = element;
        rear++;
    }
    
    /**
     * <以指定长度的数组来创建顺序队列>
     * @param element 指定顺序队列中第一个元素
     * @param initSize 指定顺序队列底层数组的长度
     */
    public SequenceQueue(T element, int initSize){
        this.capacity = initSize;
        elementData = new Object[capacity];
        elementData[0] = element;
        rear++;
    }
    
    /**
     * <获取顺序队列的大小>
     * @return [参数说明]
     * 
     * @return int [返回类型说明]
     * @exception throws [违例类型] [违例说明]
     * @see [类、类#方法、类#成员]
     * @author 
     * @date 2011-9-20
     */
    public int length(){
        return (rear-front);
    }
    
    /**
     * <判断队列是否为空>
     * @return [参数说明]
     * 
     * @return boolean [返回类型说明]
     * @exception throws [违例类型] [违例说明]
     * @see [类、类#方法、类#成员]
     * @author 
     * @date 2011-9-20
     */
    public boolean isEmpty(){
        return rear == front;
    }
    
    /**
     * <插入队列>
     * @param element [参数说明]
     * 
     * @return void [返回类型说明]
     * @exception throws [违例类型] [违例说明]
     * @see [类、类#方法、类#成员]
     * @author 
     * @date 2011-9-20
     */
    public void add(T element){
        if (rear > capacity-1){
            throw new IndexOutOfBoundsException("队列已满");
        }
        elementData[rear++] = element;
    }
    
    /**
     * <移除队列,并返回被移除的数据>
     * <在队头进行移除>
     * 
     * @return T [返回类型说明]
     * @exception throws [违例类型] [违例说明]
     * @see [类、类#方法、类#成员]
     * @author 
     * @date 2011-9-20
     */
    @SuppressWarnings("unchecked")
    public T remove(){
        if (isEmpty()){
            throw new IndexOutOfBoundsException("队列为空");
        }
        //取得队头数据
        T frontValue = (T)elementData[front];
        //释放队头元素
        elementData[front++] = null;
        
        return frontValue;
    }
    
    /**
     * <返回队头元素>
     * @return [参数说明]
     * 
     * @return T [返回类型说明]
     * @exception throws [违例类型] [违例说明]
     * @see [类、类#方法、类#成员]
     * @author 
     * @date 2011-9-20
     */
    @SuppressWarnings("unchecked")
    public T element(){
        if (isEmpty()){
            throw new IndexOutOfBoundsException("队列为空");
        }
        return (T)elementData[front];
    }
    
    /**
     * <清空顺序队列>
     * 
     * @return void [返回类型说明]
     * @exception throws [违例类型] [违例说明]
     * @see [类、类#方法、类#成员]
     * @author 
     * @date 2011-9-20
     */
    public void clear(){
        //将数组中的所有元素赋为null
        Arrays.fill(elementData, null);
        front = 0;
        rear = 0;
    }
    
    public String toString(){
        if (isEmpty()){
            return "[]";
        }
        StringBuilder sb = new StringBuilder("[");
        for (int i=front; i<rear; i++){
            sb.append(elementData[i].toString()+", ");
        }
        int len = sb.length();
        return sb.delete(len-2, len).append("]").toString();
    }
}

 

测试:

 

public class Test{
    
    /** <一句话功能简述>
     * <功能详细描述>
     * @param args [参数说明]
     * 
     * @return void [返回类型说明]
     * @exception throws [违例类型] [违例说明]
     * @see [类、类#方法、类#成员]
     * @author 
     * @date 2011-9-20
     */
    public static void main(String[] args){
        
        SequenceQueue<String> queue = new SequenceQueue<String>();
        
        queue.add("aaaa");
        queue.add("bbbb");
        queue.add("cccc");
        queue.add("dddd");
        
        System.out.println(queue);
        
        System.out.println("队头元素:"+queue.element());
        
        String remove = queue.remove();
        System.out.println("被删除的元素:"+remove);
        
        System.out.println("第一次删除后:"+queue);
    }
    
}

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    java队列

    在《Java队列》这篇博文中,可能详细探讨了以下知识点: 1. **Queue接口**:介绍`Queue`接口的基本方法,如`enqueue()`(通常通过`add()`或`offer()`实现)和`dequeue()`(通常通过`remove()`或`poll()`实现)。还...

    java队列模拟实现

    Java队列模拟实现是一个典型的计算机科学中的数据结构应用,它主要涉及了Java编程语言和队列数据结构。在这个工程中,开发者已经创建了一个基于图形用户界面(GUI)的应用程序,用于演示和操作队列的各种功能。以下...

    Java队列实现,数据结构

    在这个Java队列实现的数据结构作业练习中,我们将会探讨如何使用Java来创建一个简单的队列,并分析`Queue.java`和`Node.java`这两个文件可能包含的内容。 首先,`Queue.java`很可能是实现队列接口或类的文件。在...

    java定时器\多线程(池)\java队列Demo

    Java编程语言在处理并发任务和时间调度方面提供了丰富的工具,其中`java定时器`、`多线程(池)`和`java队列`是核心概念。让我们深入探讨这些主题。 ### 1. Java定时器(java.util.Timer) `java.util.Timer` 类允许...

    java队列源码

    在这个"java队列源码"中,我们可以看到如何利用Java来实现多线程环境下的安全队列,特别适用于抢购等高并发场景。以下将详细讨论队列、多线程以及源码实现的关键知识点。 1. **Java 队列接口与实现** - Java 提供...

    java队列实现(顺序队列、链式队列、循环队列)

    Java中的队列是一种数据结构,它遵循先进先出(FIFO)原则,即最先插入的元素将是最先被删除的。在Java中,队列的实现主要有三种:顺序队列、链式队列和循环队列。下面我们将详细探讨这三种队列的实现方式。 1. **...

    Using_Java_Queue.zip_java队列

    Java队列是Java集合框架中的一个关键组成部分,主要用于在多个线程之间同步数据传输或实现异步处理。队列遵循先进先出(FIFO)的原则,即最早添加到队列中的元素将首先被处理。本教程将深入探讨如何在Java中使用队列...

    java 队列使用

    java 队列使用,次例子是一个模拟网络爬虫工作大致流程的小例子,里面没有具体的爬取的实现,只是对爬取的流程的模拟,使用到了java 的 ArrayBlockingQueue、ConcurrentHashMap、 这2个类和java 的 volatile 关键字...

    JAVA 队列 实现卡车运输过程模拟

    下面我们将详细讨论如何使用Java队列来实现这个模拟。 首先,我们可以创建一个`Truck`类,表示每辆卡车,包含卡车编号、装载状态、当前重量等属性。当卡车到达装煤设备时,它会被添加到一个装载队列中。Java中可以...

    java定时器+多线程(池)+java队列Demo

    在“java定时器+多线程(池)+java队列Demo”这个项目中,我们将深入探讨这三个核心概念。 1. **Java定时器(java.util.Timer)**:`Timer`类用于调度周期性的任务执行。它可以安排一个任务在未来某个时间点或定期...

    DuiLie.rar_java 队列

    在IT行业中,队列是一种...以上就是使用LinkedList实现Java队列的全部操作及其背后的原理。理解这些知识点对于进行高效编程和解决复杂问题至关重要。在实际项目中,队列常用于任务调度、消息传递和并发控制等多个场景。

    java队列实现方法(顺序队列,链式队列,循环队列)

    Java 队列实现方法 Java 队列是一种常用的数据结构,用于实现先进先出(FIFO)或后进先出(LIFO)的操作。Java 中提供了多种实现队列的方法,包括顺序队列、链式队列和循环队列等。下面我们将详细介绍每种队列的...

    java队列实现

    在Java编程中,队列是一种重要的数据结构,用于存储和管理元素,特别是在处理并发和多线程场景下。本篇文章将深入探讨如何使用Java来实现队列,特别是应用于限制线程执行数量的任务调度。 首先,我们需要理解队列的...

    java 队列 链表 栈

    本篇文章将详细讲解Java中的队列、链表和栈,这些概念是许多初学者和专业人士都需要掌握的基础知识。 首先,我们来谈谈队列。队列是一种先进先出(First In First Out,简称FIFO)的数据结构,类似于现实生活中的...

    Java 队列实现原理及简单实现代码

    以下是一个简单的Java队列实现,使用数组作为底层数据结构: ```java package 栈和队列; public class Queue { private int maxSize; private long[] queArray; private int front; private int rear; ...

    Java 的 HTTP 文件队列下载.rar_java http_java 下载_java 队列

    在Java编程中,HTTP文件队列下载是一种常见的网络操作,特别是在大数据量或者多文件下载的场景下。HTTP协议是互联网上应用最为广泛的一种网络传输协议,而Java作为一门跨平台的编程语言,提供了多种方式来处理HTTP...

    Java Design Demo -简单的队列

    在IT领域,尤其是在Java编程中,队列是一种基础且重要的数据结构。队列遵循“先进先出”(First In First Out, FIFO)原则,它的主要功能是存储和管理元素序列,使得新添加的元素(入队)总是在序列末尾,而移除元素...

    java-Using-Array-for-Queue.zip_java队列实现

    在Java编程中,队列是一种线性数据结构,它遵循先进先出(FIFO)的原则。在这个场景中,我们探讨了两种使用Java实现队列的方法:一种是通过自定义的数组实现,另一种是利用内置的Vector类。接下来,我们将详细讨论这...

    java多线程模拟队列实现排队叫号

    在Java中,我们可以使用`java.util.Queue`接口及其实现类,如`LinkedList`或`ArrayDeque`来创建队列。 接下来,我们需要创建两个线程类:一个是`CustomerThread`,代表等待叫号的客户,另一个是`ServiceThread`,...

    java队列Java系列2021.pdf

    Java中的队列是一种数据结构,遵循“先入先出”(FIFO)的原则,主要用于实现生产者消费者模式。队列在并发编程中的应用尤为广泛,因为在多线程环境下,多个生产者或消费者可能同时对队列进行操作,因此线程安全的...

Global site tag (gtag.js) - Google Analytics