Java语言通过三种方法实现队列的示例代码

下面是关于“Java语言通过三种方法实现队列”的详细攻略:

一、队列的定义

在计算机科学中,队列是一种特殊的线性数据结构,它只允许在一端进行插入操作,在另一端进行删除操作。在队列中,进行插入操作的一端被称为队尾,进行删除操作的一端被称为队头。

二、常见的队列实现方法

实现队列的方法有很多,其中比较常见的包括:

1、使用数组实现队列

使用数组来实现队列,可以通过数组的下标来判断队列是否为空或已满。当队列已满时,需要进行队列扩容,将数组大小增加一倍。

下面是使用数组实现队列的示例代码:

class ArrayQueue {

    private int[] queue; // 存储队列元素的数组

    private int head;   // 队头

    private int tail;   // 队尾

    public ArrayQueue(int capacity) {
        queue = new int[capacity];
    }

    public boolean enqueue(int item) {
        if (tail == queue.length) {
            if (head == 0) {
                return false; // 队列已满
            } else {
                // 数据搬移,空出队列空间
                for (int i = head; i < tail; i++) {
                    queue[i-head] = queue[i];
                }
                tail -= head;
                head = 0;
            }
        }
        queue[tail] = item;
        tail++;
        return true;
    }

    public int dequeue() {
        if (head == tail) {
            return -1; // 队列为空
        }
        int item = queue[head];
        head++;
        return item;
    }

}

2、使用链表实现队列

使用链表来实现队列,可以通过链表的头尾指针来判断队列是否为空,并且不需要进行队列扩容。

下面是使用链表实现队列的示例代码:

class LinkedQueue {

    private Node head;  // 队头指针

    private Node tail;  // 队尾指针

    public LinkedQueue() {
        head = tail = null;
    }

    public boolean enqueue(int item) {
        Node node = new Node(item);
        if (tail == null) {
            head = tail = node;
        } else {
            tail.next = node;
            tail = node;
        }
        return true;
    }

    public int dequeue() {
        if (head == null) {
            return -1; // 队列为空
        }
        int item = head.data;
        head = head.next;
        if (head == null) {
            tail = null;
        }
        return item;
    }

    private class Node {

        private int data;   // 节点的数据

        private Node next;  // 指向下一个节点的指针

        public Node(int data) {
            this.data = data;
            this.next = null;
        }

    }

}

3、使用Java集合框架中的Queue接口实现队列

Java集合框架中提供了一个Queue接口,它是用来表示队列的。其中比较常用的实现类有ArrayDeque和LinkedList。

下面是使用Java集合框架中的Queue接口实现队列的示例代码:

class CollectionQueue {

    private Queue<Integer> queue;

    public CollectionQueue() {
        queue = new LinkedList<>();
    }

    public boolean enqueue(int item) {
        return queue.offer(item);
    }

    public int dequeue() {
        Integer item = queue.poll();
        return item == null ? -1 : item;
    }

}

三、示例说明

下面给出两个示例,分别说明如何使用上述三种方法来实现队列。

1、使用数组实现队列

// 创建一个数组实现的队列,容量为 3
ArrayQueue queue = new ArrayQueue(3);

// 往队列中加入元素
queue.enqueue(1);
queue.enqueue(2);
queue.enqueue(3);
queue.enqueue(4); // 队列已满,数据无法入队

// 从队列中取出元素并输出
System.out.println(queue.dequeue()); // 输出 1
System.out.println(queue.dequeue()); // 输出 2
System.out.println(queue.dequeue()); // 输出 3
System.out.println(queue.dequeue()); // 输出 -1,队列为空

2、使用Java集合框架中的Queue接口实现队列

// 创建一个使用LinkedList实现的队列
CollectionQueue queue = new CollectionQueue();

// 往队列中加入元素
queue.enqueue(1);
queue.enqueue(2);
queue.enqueue(3);

// 从队列中取出元素并输出
System.out.println(queue.dequeue()); // 输出 1
System.out.println(queue.dequeue()); // 输出 2
System.out.println(queue.dequeue()); // 输出 3
System.out.println(queue.dequeue()); // 输出 -1,队列为空

希望这篇攻略能够对你有所帮助!

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java语言通过三种方法实现队列的示例代码 - Python技术站

(0)
上一篇 2023年5月18日
下一篇 2023年5月18日

相关文章

  • springcloud config配置读取优先级过程详解

    Spring Cloud Config 配置读取优先级过程详解 Spring Cloud Config 是 Spring Cloud 生态系统中非常重要的一个子项目。其提供了一种分布式系统中的外部化配置解决方案,让应用程序的配置信息统一存储在一个中心化的配置中心,并且实现了配置的版本管理和追踪,为更好地进行微服务治理提供了基础支持。 在使用 Spring C…

    Java 2023年5月19日
    00
  • GSON实现Java对象的JSON序列化与反序列化的实例教程

    下面是GSON实现Java对象的JSON序列化与反序列化的实例教程,包含了完整的攻略,以及两个示例说明。 什么是GSON? GSON是Google推出的一种json序列化、反序列化库,它可以将Java对象转化为Json对象,同样也可以将Json对象转化为Java对象。 引入GSON依赖 在使用GSON之前,我们需要在项目中引入GSON的依赖。如果是使用Mav…

    Java 2023年5月27日
    00
  • LocalDateTime

    // LocalDateTime类: 获取日期时间信息。格式为 2018-09-06T15:33:56.750 // 得到指定日期时间 LocalDateTime dateTime = LocalDateTime.of(1985, 4, 15, 12, 12, 12); // 得到当前日期时间 LocalDateTime localDateTime = Lo…

    Java 2023年4月22日
    00
  • Java知识点归纳总结

    Java知识点归纳总结攻略 确定归纳目标 Java是一门广泛应用于软件开发的编程语言,包含了众多的知识点,因此归纳总结Java知识点需要确定一个明确的目标和范围。可以从以下方面入手: Java基础知识 面向对象编程 Java集合框架 多线程编程 数据库编程 网络编程 Spring框架 确定知识点的重要性和难度 不同的知识点在开发中的重要性和难度是不同的,因此…

    Java 2023年5月23日
    00
  • 基于SpringBoot实现上传2种方法工程代码实例

    下面是关于“基于SpringBoot实现上传2种方法工程代码实例”的攻略: 1. 概述 SpringBoot提供了很多方便开发的功能,其中之一就是文件上传。文件上传需要前端页面和后端接口配合实现。前端页面负责UI界面展示和获取用户输入,后端接口负责接收上传的文件并保存在服务器上。 2. 文件上传方法 2.1. 前端表单上传 前端表单上传是指用户在页面上填写表…

    Java 2023年5月20日
    00
  • 详解Spring Security中的HttpBasic登录验证模式

    开发Web应用时,安全措施不可忽视,特别是对于需要用户登录的应用程序。Spring Security是一个功能强大的安全框架,它支持多种身份验证和授权方案。其中,HttpBasic登录验证模式是最简单的一种方式。本文将详细讲解Spring Security中的HttpBasic登录验证模式。 什么是HttpBasic登录验证模式 HttpBasic登录验证模…

    Java 2023年5月20日
    00
  • javascript中负数算术右移、逻辑右移的奥秘探索

    JavaScript中负数算术右移、逻辑右移的奥秘探索 1. 什么是右移运算符 在 JavaScript 中,右移运算符由三个大于号(>>>),两个大于号(>>) 和一个小于号(<<)组成。右移运算符可以对二进制数进行运算,将其向右移动指定的位数。右移运算符在常见的开发中并不常用,但是在某些场景下会非常有用。 1.1…

    Java 2023年6月15日
    00
  • 一文带你了解SpringBoot中常用注解的原理和使用

    首先我们来介绍一下 Spring Boot 中常用的注解: @SpringBootApplication 这个注解是 Spring Boot 应用程序的入口点,同时也包含了 @EnableAutoConfiguration 和 @ComponentScan 注解,表示使用自动配置和组件扫描。 @RestController 这个注解表示一个类是 RESTfu…

    Java 2023年5月15日
    00
合作推广
合作推广
分享本页
返回顶部