ArrayBlockingQueue和ArrayDeque的区别
admin
2023-07-30 20:17:20
0

ArrayBlockingQueue是Java中实现BlockingQueue接口的一个类。ArrayBlockingQueue类和它的迭代器实现了CollectionIterator接口的所有可选方法。ArrayBlockingQueue是一个有边界的BlockingQueue,由一个数组支持。这里,有界意味着队列的大小是有限的和固定的。一旦创建,就不能扩大或缩小队列的大小。如果试图在一个满的队列中插入一个元素,那么它将导致操作被阻塞。同样地,如果试图从一个空队列中取出一个元素,那么操作也会被阻塞。ArrayBlockingQueue按照FIFO(先进先出)的顺序在内部存储队列中的元素。位于队列头部或前端的元素是这个队列中所有元素中最老的元素。队列尾部的元素是这个队列中所有元素中最新的元素。新的元素总是插在队列的末端或尾部,检索操作获得队列头部的元素。

ArrayBlockingQueue实现代码 –

import java.util.concurrent.ArrayBlockingQueue;

public class ArrayBlockingQueueDemo {

    public static void main(String[] args)
    {
        // define capacity of ArrayBlockingQueue
        int capacity = 15;

        // create object of ArrayBlockingQueue using ArrayBlockingQueue constructor
        ArrayBlockingQueue abq
            = new ArrayBlockingQueue(capacity);

        // add numbers
        abq.add(11);
        abq.add(22);
        abq.add(33);

        // print queue
        System.out.println("ArrayBlockingQueue:" + abq);
    }
}

运行结果:

ArrayBlockingQueue:[11, 22, 33]

ArrayDeque是Java中的一个类,同时实现了Queue和Deque。它可以从两边动态地调整大小。这是一种特殊的数组,可以增长,并允许用户从队列的两边添加或删除一个元素。它也被称为数组双端队列Array Deck

ArrayDeque的几个重要特点如下:

  • ArrayDeque没有容量限制,它们根据需要增长以支持使用。
  • 它们不是线程安全的,这意味着在没有外部同步的情况下,ArrayDeque不支持多线程的并发访问。
  • ArrayDeque中禁止出现空元素。
  • ArrayDeque类作为堆栈使用时,可能比Stack快。
  • ArrayDeque类作为队列使用时,可能比LinkedList快。

ArrayDeque的实现 –

import java.util.*;

public class ArrayDequeDemo {

    public static void main(String[] args)
    {

        // Initializing an deque
        Deque de_que = new ArrayDeque(10);

        // add numbers
        de_que.add(110);
        de_que.add(210);
        de_que.add(310);

        // print queue
        System.out.println("ArrayDeque:" + de_que);
    }
}

运行结果:

ArrayDeque:[110, 210, 310]

ArrayBlockingQueue和ArrayDeque之间的区别 –

编号 ArrayBlockingQueue ArrayDeque
1 ArrayBlockingQueue实现了BlockingQueue接口。 ArrayDeque实现了Deque接口。
2 ArrayBlockingQueue是一个固定大小的数组队列,一旦创建了数组,就不能增长和缩小数组的大小。 ArrayDeque是一个可调整大小的数组队列。因此,我们可以增长和缩减数组的大小。
3 ArrayBlockingQueue能够从队列的一侧添加或删除元素。 ArrayDeque能够从队列的两边添加或删除元素。
4 ArrayBlockingQueue是线程安全的。 ArrayDeque不是线程安全的。
5 ArrayBlockingQueue类不比ArrayDeque类快。 ArrayDeque类比ArrayBlockingQueue类快。

相关内容

热门资讯

Mobi、epub格式电子书如... 在wps里全局设置里有一个文件关联,打开,勾选电子书文件选项就可以了。
定时清理删除C:\Progra... C:\Program Files (x86)下面很多scoped_dir开头的文件夹 写个批处理 定...
scoped_dir32_70... 一台虚拟机C盘总是莫名奇妙的空间用完,导致很多软件没法再运行。经过仔细检查发现是C:\Program...
500 行 Python 代码... 语法分析器描述了一个句子的语法结构,用来帮助其他的应用进行推理。自然语言引入了很多意外的歧义,以我们...
小程序支付时提示:appid和... [Q]小程序支付时提示:appid和mch_id不匹配 [A]小程序和微信支付没有进行关联,访问“小...
pycparser 是一个用... `pycparser` 是一个用 Python 编写的 C 语言解析器。它可以用来解析 C 代码并构...
微信小程序使用slider实现... 众所周知哈,微信小程序里面的音频播放是没有进度条的,但最近有个项目呢,客户要求音频要有进度条控制,所...
65536是2的几次方 计算2... 65536是2的16次方:65536=2⁶ 65536是256的2次方:65536=256 6553...
Apache Doris 2.... 亲爱的社区小伙伴们,我们很高兴地向大家宣布,Apache Doris 2.0.0 版本已于...
项目管理和工程管理的区别 项目管理 项目管理,顾名思义就是专注于开发和完成项目的管理,以实现目标并满足成功标准和项目要求。 工...