java中的队列

简介: 这篇文章通过Java代码示例介绍了使用数组实现队列操作,包括队列的初始化、入队、出队、判断队列满和空以及遍历队列的方法。

java中的队列

常见的数据结构:https://blog.csdn.net/weixin_43304253/article/details/119764275

  • 先进先出
    入队enqueue(),放一个数据到队列尾部;出队:dequeue();从队列头部取出一个元素
    在这里插入图片描述
    代码实现
package com.zheng.demo5;

public class MyQueue {
    public static void main(String[] args) {
        ArrayQueue queue = new ArrayQueue(6);
        queue.enqueue(1);
        queue.enqueue(2);
        queue.enqueue(3);
        queue.enqueue(4);
        System.out.println("遍历队列");
        queue.list();
        System.out.println("出队列两个数据:");

        System.out.println(queue.dequeue());
        System.out.println(queue.dequeue());

        System.out.println("出队列后");
        queue.list();

    }

}

class ArrayQueue {
    private int first;//队列头
    private int last;//队列尾
    private int sizeMax;//队列大小
    private int[] queue;//队列

    //构造函数初始化

    public ArrayQueue(int sizeMax) {
        this.sizeMax = sizeMax;
        queue = new int[this.sizeMax];
        first = this.sizeMax - 1;//将队列头和尾初始值为队列的最前端
        last = this.sizeMax - 1;

    }

    //判断队列是否满
    public boolean isFull() {
        return last == -1;//代表插入的数据满
    }

    //判断是否为空
    public boolean isEmpty() {
        return first == last;//当队列头和队列尾相同的情况下
    }

    //入队列
    public void enqueue(int data) {
        //判断队列是否满
        if (isFull()) {
            throw new RuntimeException("队列满");
        }

        queue[last] = data;
        last--;
    }

    //出队列
    public int dequeue() {
        //判断队列是否为空
        if (isEmpty()) {
            throw new RuntimeException("队列为空");
        }

        int val = queue[first];
        first--;
        return val;

    }

    //遍历
    public void list() {
        //判断队列是否为空
        if (isEmpty()) {
            throw new RuntimeException("队列为空");
        }
        for (int i = first; i > last; i--) {
            System.out.printf("queue[%d]=%d\n", i, queue[i]);

        }

    }


}

在这里插入图片描述

相关文章
|
6天前
|
存储 监控 Java
JAVA线程池有哪些队列? 以及它们的适用场景案例
不同的线程池队列有着各自的特点和适用场景,在实际使用线程池时,需要根据具体的业务需求、系统资源状况以及对任务执行顺序、响应时间等方面的要求,合理选择相应的队列来构建线程池,以实现高效的任务处理。
82 12
|
8月前
|
算法 Java
Java数据结构——队列
Java数据结构——队列
57 4
|
3月前
|
存储 安全 Java
【用Java学习数据结构系列】探索栈和队列的无尽秘密
【用Java学习数据结构系列】探索栈和队列的无尽秘密
42 2
|
4月前
|
Java API 容器
JAVA并发编程系列(10)Condition条件队列-并发协作者
本文通过一线大厂面试真题,模拟消费者-生产者的场景,通过简洁的代码演示,帮助读者快速理解并复用。文章还详细解释了Condition与Object.wait()、notify()的区别,并探讨了Condition的核心原理及其实现机制。
|
3月前
|
存储 算法 Java
【用Java学习数据结构系列】用堆实现优先级队列
【用Java学习数据结构系列】用堆实现优先级队列
43 0
|
6月前
|
设计模式 安全 Java
Java面试题:请解释Java中的线程池以及为什么要使用线程池?请解释Java中的内存模型以及如何避免内存泄漏?请解释Java中的并发工具包以及如何实现一个简单的线程安全队列?
Java面试题:请解释Java中的线程池以及为什么要使用线程池?请解释Java中的内存模型以及如何避免内存泄漏?请解释Java中的并发工具包以及如何实现一个简单的线程安全队列?
54 1
|
7月前
|
Java 开发者
揭秘!LinkedList是如何华丽变身成为Java队列之王的?
【6月更文挑战第18天】Java的`LinkedList`既是列表也是队列之星,实现`Queue`接口,支持FIFO操作。其内部的双向链表结构确保了添加/移除元素的高效性(O(1)),适合作为队列使用。它线程不安全,但可通过同步包装用于多线程环境。此外,`LinkedList`还能灵活变身栈或双端队列,提供多种数据结构功能。
72 11
|
7月前
|
Java
2023蓝桥杯大赛软件类省赛Java大学B组G题 买二增一 队列的简单应用
2023蓝桥杯大赛软件类省赛Java大学B组G题 买二增一 队列的简单应用
50 1
|
7月前
|
安全 Java
Java Queue新玩法:用LinkedList打造高效队列,让你的代码飞起来!
【6月更文挑战第18天】Java集合框架中的`LinkedList`不仅是列表,还可作为高效队列。由于其在链表两端进行添加/移除操作的时间复杂度为O(1),故适合实现并发环境下的任务队列。通过案例展示了如何创建、添加任务及确保线程安全,揭示了`LinkedList`提升代码性能的秘密,特别是在多线程应用中的价值。
60 4
|
7月前
|
安全 Java 调度
Java Queue深度解析:LinkedList为何成为队列的最佳实践?
【6月更文挑战第18天】Java的`LinkedList`适合作为队列,因其双向链表结构支持O(1)的头尾操作。非线程安全的`LinkedList`在单线程环境下效率高,多线程时可通过`Collections.synchronizedList`封装。此外,它还可兼做栈和双端队列,提供任务调度的高效解决方案。
79 3