java中的queue类是什么,啥作用?

java中的queue类是队列数据结构管理类。在它里边的元素可以按照添加它们的相同顺序被移除。队列通常(但并非一定)以 FIFO(先进先出)的方式排序各个元素。不过优先级队列和 LIFO 队列(或堆栈)例外,前者根据提供的比较器或元素的自然顺序对元素进行排序,后者按 LIFO(后进先出)的方式对元素进行排序。...
java中的queue类是什么,啥作用?
在java5中新增加了java.util.Queue接口,用以支持队列的常见操作。该接口扩展了java.util.Collection接口。
Queue使用时要尽量避免Collection的add()和remove()方法,而是要使用offer()来加入元素,使用poll()来获取并移出元素。它们的优
点是通过返回值可以判断成功与否,add()和remove()方法在失败的时候会抛出异常。 如果要使用前端而不移出该元素,使用
element()或者peek()方法。
值得注意的是LinkedList类实现了Queue接口,因此我们可以把LinkedList当成Queue来用。

小例子:/**** @author Zang XT*/import java.util.Queue;import java.util.LinkedList;public class TestQueue {public static void main(String[] args) {Queue<String> queue = new LinkedList<String>();queue.offer("Hello");queue.offer("World!");queue.offer("你好!");System.out.println(queue.size());String str;while((str=queue.poll())!=null){System.out.print(str);}System.out.println();System.out.println(queue.size());}}

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

offer 添加一个元素并返回true 如果队列已满,则返回false
poll 移除并返问队列头部的元素 如果队列为空,则返回null
peek 返回队列头部的元素 如果队列为空,则返回null
put 添加一个元素 如果队列满,则阻塞
take 移除并返回队列头部的元素 如果队列为空,则阻塞
element 返回队列头部的元素 如果队列为空,则抛出一个NoSuchElementException异常

add 增加一个元索 如果队列已满,则抛出一个IIIegaISlabEepeplian异常
remove 移除并返回队列头部的元素 如果队列为空,则抛出一个
NoSuchElementException异常

注意:poll和peek方法出错进返回null。因此,向队列中插入null值是不合法的。

还有带超时的offer和poll方法重载,例如,下面的调用:
boolean success = q.offer(x,100,TimeUnit.MILLISECONDS);
尝试在100毫秒内向队列尾部插入一个元素。如果成功,立即返回true;否则,当到达超时进,返回false。同样地,调用:
Object head = q.poll(100, TimeUnit.MILLISECONDS);
如果在100毫秒内成功地移除了队列头元素,则立即返回头元素;否则在到达超时时,返回null。
阻塞操作有put和take。put方法在队列满时阻塞,take方法在队列空时阻塞。

Queue接口与List、Set同一级别,都是继承了Collection接口。LinkedList实现了Queue接 口。Queue接口窄化了对LinkedList的方法的访问权限(即在方法中的参数类型如果是Queue时,就完全只能访问Queue接口所定义的方法 了,而不能直接访问 LinkedList的非Queue的方法),以使得只有恰当的方法才可以使用。BlockingQueue 继承了Queue接口。2015-08-03
java5中新增加了java.util.Queue接口,用以支持队列的常见操作。该接口扩展了java.util.Collection接口。
Queue使用时要尽量避免Collection的add()和remove()方法,而是要使用offer()来加入元素,使用poll()来获取并移出元素。它们的优
点是通过返回值可以判断成功与否,add()和remove()方法在失败的时候会抛出异常。 如果要使用前端而不移出该元素,使用
element()或者peek()方法。
值得注意的是LinkedList类实现了Queue接口,因此我们可以把LinkedList当成Queue来用。 小例子: /**
*
* @author Zang XT
*/
import java.util.Queue;
import java.util.LinkedList;
public class TestQueue {
public static void main(String[] args) {
Queue<String> queue = new LinkedList<String>();
queue.offer("Hello");
queue.offer("World!");
queue.offer("你好!");
System.out.println(queue.size());
String str;
while((str=queue.poll())!=null){
System.out.print(str);
}
System.out.println();
System.out.println(queue.size());
}
} offer,add区别:
一些队列有大小限制,因此如果想在一个满的队列中加入一个新项,多出的项就会被拒绝。
这时新的 offer 方法就可以起作用了。它不是对调用 add() 方法抛出一个 unchecked 异常,而只是得到由 offer() 返回的 false。

poll,remove区别:
remove() 和 poll() 方法都是从队列中删除第一个元素(head)。remove() 的行为与 Collection 接口的版本相似,
但是新的 poll() 方法在用空集合调用时不是抛出异常,只是返回 null。因此新的方法更适合容易出现异常条件的情况。

peek,element区别:
element() 和 peek() 用于在队列的头部查询元素。与 remove() 方法类似,在队列为空时, element() 抛出一个异常,而 peek() 返回 null。2013-04-15
import java.util.*;public class Countdown { public static void main(String[] args) throws InterruptedException { int time = 10; Queue<Integer> queue = new LinkedList<Integer>(); for (int i = time; i >= 0; i--) queue.add(i); while(!queue.isEmpty()) { System.out.println(queue.remove()); Thread.sleep(1000); } }}程序的输出结果为:1098…..2013-04-14
mengvlog 阅读 368 次 更新于 2025-09-09 14:24:16 我来答关注问题0
  •  翡希信息咨询 Java集合(List、Set、Queue、Map)区别及主要实现类讲解

    Queue ArrayQueue(注:这里可能是指ArrayDeque,因为ArrayQueue不是Java标准库中的类名)底层数据结构:基于Object数组和双指针实现。特点:支持FIFO(先进先出)的队列操作;线程不安全。PriorityQueue底层数据结构:基于Object数组实现二叉堆,默认是大顶堆。特点:元素按照优先级排序(大顶堆或小顶堆);不...

  •  翡希信息咨询 java中的queue类有哪些用法?

    Java中的Queue类主要有以下用法:创建队列:Queue类可用于创建一个基本的队列数据结构。Java的Queue接口是Java集合框架的一部分,实现此接口的类必须提供在队列尾部添加元素和在队列头部移除元素的方法,便于开发者管理队列。线程同步:Queue在并发编程中起重要作用,一些特定的Queue实现是线程安全的,能在多线...

  •  kitencx 为什么javaSE不能初始化Queue类型

    接口接收实现类,Queue是接口,ArrayDeque是实现类,接口不能实例化就是不能new Queue q = new ArrayDeque();类似的用法还有,比如:List list=new ArrayList();

  •  赛玖百科小窍门 Java学习笔记 —— 集合(四)

    Java学习笔记 —— 集合(四):Queue与Deque、PriorityQueueQueue定义与实现:LinkedList实现了Queue与Deque接口,因此当需要建立队列实例时,可以直接使用LinkedList来实现。面向抽象编程:在编写代码时,始终遵循面向抽象编程的原则,可以大大提高代码的质量。例如,通过Queue queue = new LinkedList...

  • java中的queue类是队列数据结构管理类。在它里边的元素可以按照添加它们的相同顺序被移除。队列通常(但并非一定)以 FIFO(先进先出)的方式排序各个元素。不过优先级队列和 LIFO 队列(或堆栈)例外,前者根据提供的比较器或元素的自然顺序对元素进行排序,后者按 LIFO(后进先出)的方式对元素进行排序。...

檬味博客在线解答立即免费咨询

Java相关话题

Copyright © 2023 WWW.MENGVLOG.COM - 檬味博客
返回顶部