队列是一种特殊的线性表,它只允许在表的前端进行删除操作,而在表的后端进行插入操作。LinkedList类实现了Queue接口,因此我们可以把LinkedList当成Queue来用。
官方描述:
设计用于在处理之前容纳元素的集合。除了基本的集合操作外,队列还提供了额外的插入、提取和检查操作。这些方法都以两种形式存在:一种形式在操作失败时抛出异常,另一种形式返回一个特殊值(null或false,取决于操作)。插入操作的后一种形式是专门为容量受限的队列实现而设计的;在大多数实现中,插入操作不会失败。
方法:
Throws exception/Description | Return special value/Description | |
---|---|---|
insert |
add(e) 如果可以立即将指定的元素插入此队列,而不会违反容量限制,则在成功时返回true,如果当前没有可用空间,则抛出IllegalStateException。 |
offer(e) 如果可以在不违反容量限制的情况下立即将指定的元素插入此队列。 |
Remove |
remove() 检索并删除此队列的头。 |
poll() 检索并删除此队列的头,如果此队列为空,则返回null。 |
Examine |
element() 检索但不删除此队列的头。 |
peek() 检索但不删除此队列的头,如果此队列为空,则返回null。 |
队列通常但不一定以FIFO(先进先出)的方式对元素进行排序。例外情况包括优先级队列(根据提供的比较器对元素进行排序或元素的自然排序)和LIFO队列(或堆栈),对LIFO进行排序(后进先出)。无论使用哪种顺序,队列的开头都是该元素,可以通过调用remove()或poll()将其删除。在FIFO队列中,所有新元素都插入队列的尾部。其他种类的队列可能使用不同的放置规则。每个Queue实现必须指定其排序属性。
offer方法在可能的情况下插入一个元素,否则返回false。这不同于Collection.add方法,后者只能通过抛出未经检查的异常来添加元素。 offer方法设计用于在正常情况下(而不是在异常情况下)发生故障时,例如在固定容量(或“有界”)队列中使用。
remove()和poll()方法将删除并返回队列的头部。确切地说,从队列中删除了哪个元素是队列的排序策略的函数,每个实现的实现方法不同。仅当队列为空时,remove()和poll()方法的行为不同:remove()方法引发异常,而poll()方法返回null。
element()和peek()方法返回但不删除队列的头部。
队列实现通常不允许插入null元素,尽管某些实现(例如LinkedList)不允许插入null。即使在允许的实现中,也不应将null插入到队列中,因为poll方法还将null用作特殊的返回值,以指示该队列不包含任何元素。
用法:
import java.util.LinkedList;
import java.util.Queue;
public class Main {
public static void main(String[] args) {
//add()和remove()方法在失败的时候会抛出异常(不推荐)
Queue<String> queue = new LinkedList<String>();
//添加元素
queue.offer("a");
queue.offer("b");
queue.offer("c");
queue.offer("d");
queue.offer("e");
for(String q : queue){
System.out.println(q);
}
System.out.println("===");
System.out.println("poll="+queue.poll()); //返回第一个元素,并在队列中删除
for(String q : queue){
System.out.println(q);
}
System.out.println("===");
System.out.println("element="+queue.element()); //返回第一个元素
for(String q : queue){
System.out.println(q);
}
System.out.println("===");
System.out.println("peek="+queue.peek()); //返回第一个元素
for(String q : queue){
System.out.println(q);
}
}
}
今天的文章java queue详解分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/5470.html