java实现队列queue数据结构详解

Java实现队列(Queue)数据结构详解

什么是队列(Queue)

队列(Queue),是一种先进先出(First In First Out, FIFO)的数据结构,即最先进入队列的元素也会最先出队列。

队列具备两个基本操作:入队(enqueue)和出队(dequeue)。入队操作将元素加入到队列的尾部,出队操作将元素从队列头部取出并删除。

Java中的Queue接口

在Java中,队列类都实现了Queue接口,该接口继承了Collection接口,像LinkedList和ArrayBlockingQueue等类都实现了该接口。

Queue接口提供了一些方法,如下:

  • add(e):将元素e添加到队列尾部,如果队列满了则抛出异常。
  • offer(e):将元素e添加到队列尾部,如果队列满了则返回false。
  • remove():移除队列头部并返回头部元素,如果队列为空则抛出异常。
  • poll():移除队列头部并返回头部元素,如果队列为空则返回null。
  • element():获取队列头部元素,如果队列为空则抛出异常。
  • peek():获取队列头部元素,如果队列为空则返回null。

Java中的队列实现示例

使用LinkedList实现队列

import java.util.LinkedList;
import java.util.Queue;

public class LinkedListDemo {

    public static void main(String[] args) {
        Queue<String> queue = new LinkedList<>();

        // add elements to the queue
        queue.add("a");
        queue.add("b");
        queue.add("c");

        // print the queue
        System.out.println("Queue: " + queue);

        // remove the first element from the queue
        String firstElement = queue.poll();
        System.out.println("Removed Element: " + firstElement);

        // print the queue after removing the first element
        System.out.println("Queue: " + queue);

        // add a new element to the queue
        queue.add("d");

        // print the queue after adding a new element
        System.out.println("Queue: " + queue);

        // get the first element from the queue
        String peekElement = queue.peek();
        System.out.println("First Element: " + peekElement);

        // print the queue
        System.out.println("Queue: " + queue);
    }
}

输出:

Queue: [a, b, c]
Removed Element: a
Queue: [b, c]
Queue: [b, c, d]
First Element: b
Queue: [b, c, d]

使用ArrayBlockingQueue实现队列

import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;

public class ArrayBlockingQueueDemo {

    public static void main(String[] args) throws InterruptedException {
        // create a queue with a capacity of 5
        BlockingQueue<String> queue = new ArrayBlockingQueue<>(5);

        // add elements to the queue
        queue.put("a");
        queue.put("b");
        queue.put("c");

        // print the queue
        System.out.println("Queue: " + queue);

        // remove the first element from the queue
        String firstElement = queue.take();
        System.out.println("Removed Element: " + firstElement);

        // print the queue after removing the first element
        System.out.println("Queue: " + queue);

        // add a new element to the queue
        queue.put("d");

        // print the queue after adding a new element
        System.out.println("Queue: " + queue);

        // get the first element from the queue
        String peekElement = queue.peek();
        System.out.println("First Element: " + peekElement);

        // print the queue
        System.out.println("Queue: " + queue);
    }
}

输出:

Queue: [a, b, c]
Removed Element: a
Queue: [b, c]
Queue: [b, c, d]
First Element: b
Queue: [b, c, d]

总结

队列是一个常用的数据结构,Java提供了多种实现方式,如LinkedList、ArrayBlockingQueue等。在使用时我们需要考虑具体的场景需求来选择合适的队列实现。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java实现队列queue数据结构详解 - Python技术站

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

相关文章

  • 柏林噪声算法(Perlin Noise)

    概述 引述维基百科的介绍: Perlin噪声(Perlin noise,又称为柏林噪声)指由Ken Perlin发明的自然噪声生成算法,具有在函数上的连续性,并可在多次调用时给出一致的数值。 在电子游戏领域中可以透过使用Perlin噪声生成具连续性的地形;或是在艺术领域中使用Perlin噪声生成图样。 维基百科的介绍相当的官方,其实可以理解为一个随机函数,不…

    算法与数据结构 2023年4月17日
    00
  • 【ACM算法竞赛日常训练】DAY16【奇♂妙拆分】【区区区间间间】【小AA的数列】数学 | 位运算 | 前缀和

    DAY16共3题: 奇♂妙拆分(简单数学) 区区区间间间(单调栈) 小AA的数列(位运算dp) ? 作者:Eriktse? 简介:19岁,211计算机在读,现役ACM银牌选手?力争以通俗易懂的方式讲解算法!❤️欢迎关注我,一起交流C++/Python算法。(优质好文持续更新中……)?? 阅读原文获得更好阅读体验:https://www.eriktse.com…

    算法与数据结构 2023年4月20日
    00
  • C#数据结构与算法揭秘三 链表

    作为一本通俗易懂的C#数据结构与算法书籍,其第三章主要介绍链表(Linked List)的概念和基本操作。下面是链表的基本概念: 链表(Linked List)是一种动态数据结构,其中的元素按线性顺序排列,并且每个元素都称为一个结点(Node)。 每个结点都包含一个元素和一个指向下一个结点的指针(Pointer)。 相比于数组,链表的优势在于能够轻松地增加或…

    数据结构 2023年5月17日
    00
  • [paper reading]|IC-FPS: Instance-Centroid Faster Point Sampling Module for 3D Point-base

    摘要: 本文说首次实现了大规模点云场景中基于点的模型的实时检测(<30ms); 首先指出FPS采样策略进行下采样是耗时的,尤其当点云增加的时候,计算量和推理时间快速增加; 本文提出IC-FPS;包含两个模块:local feature diffusion based background point filter (LFDBF);Centroid In…

    算法与数据结构 2023年4月17日
    00
  • C语言数据结构与算法之链表(一)

    欢迎阅读本篇文章,本文将为大家详细讲解C语言中数据结构与算法之链表。接下来,将从以下几个方面为大家讲述: 链表的定义 链表的特点 链表的分类 单向链表的实现及应用 双向链表的实现及应用 示例说明 1. 链表的定义 链表是由一系列节点组合而成的数据结构,每个节点都包含了一个数据域和一个指向下一个节点的指针域。其中,链表的头结点为第一个节点,而尾节点为最后一个节…

    数据结构 2023年5月17日
    00
  • C语言实现数据结构迷宫实验

    C语言实现数据结构迷宫实验攻略 简介 迷宫是计算机图形学中的一个经典问题,也是数据结构和算法中常见的题目。C语言是一种广泛使用的编程语言,具有充分的编程接口和功能,可以方便地实现迷宫算法和数据结构。 本文将详细讲解C语言实现数据结构迷宫实验的完整攻略,让读者能够更加深入地理解迷宫算法和数据结构的应用。 实现步骤 1. 创建迷宫结构体 首先需要创建一个迷宫结构…

    数据结构 2023年5月17日
    00
  • C#模拟链表数据结构的实例解析

    C#模拟链表数据结构的实例解析 简介 链表是一种常见的数据结构,它由一系列节点组成,每个节点包含一个数据元素和指向下一个节点的指针。本篇文章将介绍如何使用 C# 来模拟链表数据结构,并通过两个示例展示如何实现链表的操作。 链表的基本结构 链表是由一系列节点组成的,每个节点包含一个数据元素和指向下一个节点的指针。我们可以通过以下代码定义一个链表节点的类: pu…

    数据结构 2023年5月17日
    00
  • JavaScript中的Map数据结构详解

    JavaScript中的Map数据结构详解 什么是Map数据结构 Map是JavaScript中一种新的数据结构,类似于对象,但是比对象更加灵活。Map可以将任意类型的值作为键名(包括对象、字符串、数字、布尔值等),并且不会将键名强制转换为字符串。Map的键值对个数没有限制,可以根据需要动态地增加或者删除键值对。Map内部实现了一个哈希表,因此增加、删除、查…

    数据结构 2023年5月17日
    00
合作推广
合作推广
分享本页
返回顶部