java队列之queue用法实例分析

Java队列之Queue用法实例分析

什么是队列?

队列是一种特殊的线性数据结构,按照先进先出(First In First Out,FIFO)的原则存储数据,在队列的一端添加数据,在另一端删除数据,有点像排队买东西,先来的先买,后来的后买。

在Java中,队列的实现方式是使用Queue接口,Queue是Java中表示队列的接口,它继承了Collection接口,并在这个基础上添加了一些额外方法。

Queue的特性

  1. 元素只能在队尾添加,只能在队首删除。
  2. Queue只允许youpeek操作(查询队头元素),而不允许遍历整个队列。
  3. 支持同步,可以作为多线程环境中的任务队列使用。

如何使用Queue?

  1. 创建一个Queue实例,可以使用Java中已经实现的类LinkedList作为队列。
Queue<String> queue=new LinkedList<>();
  1. 添加元素:
queue.offer("a");  // 添加元素a
queue.offer("b");  // 添加元素b
queue.offer("c");  // 添加元素c
  1. 删除元素:
queue.poll();  // 删除队头元素a
  1. 查询元素:
queue.peek();  // 查询队头元素,返回b

示例说明

示例1:使用Queue求解迷宫问题

队列可以很方便地求解迷宫问题。我们可以将每一个位置看作一个节点,将节点放入队列中,并进行遍历找出终点。

public static void bfs(int[][] maze, int startX, int startY, int endX, int endY) {
    Queue<Point> queue = new LinkedList<>();
    queue.offer(new Point(startX, startY, null));
    Set<Point> visited = new HashSet<>();
    while (!queue.isEmpty()) {
        Point point = queue.poll();
        if (point.x == endX && point.y == endY) {
            printPath(point);
            return;
        }
        visited.add(point);
        for (Point next : getNexts(maze, point)) {
            if (!visited.contains(next)) {
                queue.offer(next);
            }
        }
    }
}

示例2:使用Queue实现线程池

线程池可以通过阻塞队列实现。当线程池中所有线程都在执行任务时,新任务需要等待,此时新任务可以被添加到阻塞队列中,等待有空闲的线程执行。

public class ThreadPool {
    private int coreSize;
    private int maxSize;
    private BlockingQueue<Runnable> queue;

    public ThreadPool(int coreSize, int maxSize, int queueSize) {
        this.coreSize = coreSize;
        this.maxSize = maxSize;
        this.queue = new ArrayBlockingQueue<>(queueSize);
        init();
    }

    private void init() {
        for (int i = 0; i < coreSize; i++) {
            new Thread(() -> {
                while (true) {
                    try {
                        Runnable task = queue.take();
                        task.run();
                    } catch (InterruptedException e) {
                        break;
                    }
                }
            }).start();
        }
    }

    public void submit(Runnable task) throws InterruptedException {
        if (queue.size() == maxSize) {
            throw new RuntimeException("queue is full");
        }
        queue.put(task);
    }
}

以上示例仅为Queue使用的两个简单的例子,Queue在实际应用中有着更加广泛和深入的应用场景。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java队列之queue用法实例分析 - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • Win10如何删除用户配置文件 Win10删除用户配置文件方法

    Win10如何删除用户配置文件 什么是用户配置文件 用户配置文件是指保存在计算机上的,用于存储应用程序和操作系统个性化设置的文件夹,通常包括应用程序的偏好设置、数据、缓存等信息。在 Windows 10 操作系统中,用户配置文件存储在 %UserProfile% 路径下。 删除用户配置文件的原因 可能出现一些情况,需要删除用户配置文件,例如: 应用程序出现故…

    other 2023年6月25日
    00
  • 比特币闪电网络Lightning Labs上线Taproot Assets v0.2!打造多资产网络

    比特币闪电网络Lightning Labs上线Taproot Assets v0.2!打造多资产网络 背景介绍 比特币闪电网络是一种基于比特币区块链技术的支付协议,其主要优势在于速度快、手续费低,并且具有极高的安全性。为进一步完善和扩展比特币闪电网络,Lightning Labs推出了Taproot Assets v0.2版本,致力于打造一个多资产的网络,供…

    other 2023年6月28日
    00
  • SQL嵌套查询总结

    SQL嵌套查询总结攻略 SQL嵌套查询是一种在查询语句中嵌套使用子查询的技术。它允许我们在一个查询中使用另一个查询的结果作为条件或数据源。嵌套查询可以帮助我们解决复杂的查询需求,提高查询的灵活性和效率。下面是SQL嵌套查询的详细攻略。 1. 子查询的基本语法 子查询是嵌套在主查询中的查询语句。它可以出现在主查询的SELECT、FROM、WHERE或HAVIN…

    other 2023年7月28日
    00
  • 电脑老是自动重启的原因以及解决方法

    电脑老是自动重启的原因以及解决方法 原因 电脑自动重启通常是因为出现系统错误或蓝屏而导致的。当系统检测到遇到无法处理的错误时,为了保护计算机硬件和数据安全,自动重启是一种安全机制。在这种情况下,计算机会显示一个蓝色的屏幕,通常称为“蓝屏死机”或“蓝屏错误”。 常见的引起电脑自动重启的原因包括: 软件问题: 安装了不兼容的或已经过时的软件可能导致系统错误,从而…

    other 2023年6月27日
    00
  • 红米1S电信版开发者选项在哪 红米手机1s电信版打开开发者选项方法

    红米1S电信版开启开发者选项 红米1S手机是一款非常受用户欢迎的手机,但是对于一些技术爱好者来说,需要打开开发者选项才能更好地进行开发工作。在下面,我们将详细介绍红米1S电信版如何开启开发者选项。 步骤一:前往设置 首先,在红米1S电信版手机的主屏幕上找到“设置”图标,并点击进入设置菜单页面。 示例代码: 1. 点击红米1S电信版主屏幕上的“设置”图标; 2…

    other 2023年6月26日
    00
  • 字母a的ascii编码值和unicode编码值相同

    字母a的ascii编码值和unicode编码值相同 字母a是26个英文字母之一,它在ASCII编码中的值为97,而在Unicode编码中的值也是97。这意味着,在ASCII编码和Unicode编码中,字母a的编码值是相同的。这是因为ASCII编码是Unicode编码的一个子集。 什么是ASCII编码? ASCII编码是一种将字符转换为数字的编码方法。它是一个…

    其他 2023年3月29日
    00
  • C#Light Unity逻辑热更新解决方案0.20 发布

    C#Light Unity逻辑热更新解决方案0.20 发布 我们非常高兴地宣布C#Light Unity逻辑热更新解决方案0.20的发布。这个版本是我们最新的更新,旨在帮助Unity开发者更轻松地实现热更新功能,并提供更好的运行时性能。 C#Light概述 C#Light是专门为Unity开发者设计的热更新方案,它可以在运行时动态加载C#代码,并且可以与Un…

    其他 2023年3月28日
    00
  • c#操作word的超详细总结

    C#操作Word的超详细总结 Microsoft Word是一个被广泛使用的文本编辑器软件,而C#作为一种流行的编程语言,可以很方便地实现对Word的操作。本篇文章将详细介绍C#操作Word的步骤和技巧,让大家能够快速、准确地完成Word操作的任务。 1. 引入Word对象 在C#中实现对Word的操作,需要先在程序中引入Word对象。我们可以使用下面的代码…

    其他 2023年3月28日
    00
合作推广
合作推广
分享本页
返回顶部