java队列,java队列的使用

发布时间:2022-11-17

本文目录一览:

  1. java中的队列都有哪些
  2. java中queue的使用方法?
  3. 在java中,什么是队列?
  4. JAVA中队列和栈的区别
  5. java中的队列都有哪些,有什么区别?

java中的队列都有哪些

常见的有: 有界队列:

  • ArrayBlockingQueue
  • LinkedBlockingQueue
  • PriorityBlockingQueue(具有优先级的队列) 无界队列:
  • SynchronousQueue

java中queue的使用方法?

Java中的Queue类是队列数据结构管理类。在它里面的元素可以按照添加它们的相同顺序被移除。 队列通常(但并非一定)以 FIFO(先进先出)的方式排序各个元素。不过优先级队列和 LIFO 队列(或堆栈)例外,前者根据提供的比较器或元素的自然顺序对元素进行排序,后者按 LIFO(后进先出)的方式对元素进行排序。无论使用哪种排序方式,队列的头都是调用 remove()poll() 所移除的元素。在 FIFO 队列中,所有的新元素都插入队列的末尾。其他种类的队列可能使用不同的元素放置规则。每个 Queue 实现必须指定其顺序属性。

常用方法:

  • offer:添加一个元素并返回 true;如果队列已满,则返回 false
  • poll:移除并返回队列头部的元素;如果队列为空,则返回 null
  • peek:返回队列头部的元素;如果队列为空,则返回 null
  • put:添加一个元素;如果队列满,则阻塞
  • take:移除并返回队列头部的元素;如果队列为空,则阻塞
  • element:返回队列头部的元素;如果队列为空,则抛出一个 NoSuchElementException 异常
  • add:增加一个元素;如果队列已满,则抛出一个 IllegalStateException 异常
  • remove:移除并返回队列头部的元素;如果队列为空,则抛出一个 NoSuchElementException 异常 注意:pollpeek 方法出错时返回 null。因此,向队列中插入 null 值是不合法的。 还有带超时的 offerpoll 方法重载,例如:
boolean success = q.offer(x, 100, TimeUnit.MILLISECONDS);

尝试在 100 毫秒内向队列尾部插入一个元素。如果成功,立即返回 true;否则,当到达超时时,返回 false。同样地,调用:

Object head = q.poll(100, TimeUnit.MILLISECONDS);

如果在 100 毫秒内成功地移除了队列头元素,则立即返回头元素;否则在到达超时时,返回 null。 阻塞操作有 puttakeput 方法在队列满时阻塞,take 方法在队列空时阻塞。 Queue 接口与 ListSet 同一级别,都是继承了 Collection 接口。LinkedList 实现了 Queue 接口。Queue 接口窄化了对 LinkedList 的方法的访问权限(即在方法中的参数类型如果是 Queue 时,就完全只能访问 Queue 接口所定义的方法了,而不能直接访问 LinkedList 的非 Queue 的方法),以使得只有恰当的方法才可以使用。BlockingQueue 继承了 Queue 接口。

在java中,什么是队列?

Java 中没有队列这个东西吧...队列这个是出现在数据结构里面的吧。 队列的结构是先进先出。有队头和队尾,数据从尾进,从头读出来。 例如:1 2 3 4 5 这么一个队列,Java 读这个数据是从队头 1 开始读,读到 1 后把它拿出来,队列剩下 2 3 4 5。如果要添加进去,则是在队尾 5 的后面加一个,如 3,那么队列变成 2 3 4 5 3。 这与栈不同,栈是先进后出。你可以自己翻书或者网上搜索“数据结构 栈”。 补充一下,Java 是有提供队列的类的,建议自己查阅 API 文档。

JAVA中队列和栈的区别

队列 (Queue):是限定只能在表的一端进行插入和在另一端进行删除操作的线性表;
栈 (Stack):是限定只能在表的一端进行插入和删除操作的线性表。

区别如下:

一、规则不同

  1. 队列:先进先出 (First In First Out, FIFO)
  2. :先进后出 (First In Last Out, FILO)

二、对插入和删除操作的限定不同

  1. 队列:只能在表的一端进行插入,并在表的另一端进行删除;
  2. :只能在表的一端插入和删除。

三、遍历数据速度不同

  1. 队列:基于地址指针进行遍历,而且可以从头部或者尾部进行遍历,但不能同时遍历,无需开辟空间,因为在遍历的过程中不影响数据结构,所以遍历速度要快;
  2. :只能从顶部取数据,也就是说最先进入栈底的,需要遍历整个栈才能取出来,而且在遍历数据的同时需要为数据开辟临时空间,保持数据在遍历前的一致性。

java中的队列都有哪些,有什么区别?

Java 中的队列主要分为以下几种:

  • 阻塞队列
  • 普通队列
  • 非阻塞队列

区别:

阻塞队列普通队列 的区别在于:

  • 当队列是空时,从队列中获取元素的操作会被阻塞;
  • 当队列是满时,往队列中添加元素的操作会被阻塞;
  • 试图从空的队列中取元素的线程或从满的队列中添加元素的线程同样会被阻塞。

队列的基本操作:

队列的两个基本操作是:

  • inserting(插入) 一个数据项,即把一个数据项放入队尾;
  • removing(移除) 一个数据项,即移除队头的数据项。 这类似于电影爱好者排队买票时先排到队尾,然后到达队头买票后离开队列。 栈中的插入和移除数据项方法的命名是很标准,称为 pushpop。队列的方法至今没有标准化的命名。“插入”可以称为 putaddenqueue,而“删除”可以叫 deletegetdequeue。插入数据项的队尾,也可以叫作 backtailend。而移除数据项的队头,也可以叫 head。下面将使用 insertremovefrontrear。 插入将值插入队尾,同时队尾箭头增加一,指向新的数据项。