10年世界杯冠军_梅西2018年世界杯 - kefulq.com

Java队列完全指南:原理、实现与应用场景详解

美国篮球世界杯 2026-02-10 20:43:53

Operation

Throws exception

Special value

Insert

add(e)

offer(e)

Remove

remove()

poll()

Examine

element()

peek()

在接下来的章节中,我们会逐一介绍每个操作,并使用一些有用的例子进行详细讨论。

Java 队列的插入操作

在本节中,我们将详细讨论Java队列的插入操作,并提供一些有用的示例。如果此操作成功执行,它将返回”true”值。正如我们所知,队列支持两种形式的插入操作。

Queue.add(e):

It throws an exception if the operation fails.- Queue.offer(e):

It returns a special value if the operation fails.

请注意:这里的特殊值可以是“false”或“null”。

排队增加()操作

使用add()操作将新元素插入队列。如果插入操作成功,它会返回”true”值。否则,它会抛出java.lang.IllegalStateException异常。让我们开发一个简单的示例来演示这个功能。

import java.util.concurrent.*;

public class QueueAddOperation {

public static void main(String[] args) {

BlockingQueue queue = new ArrayBlockingQueue<>(2);

System.out.println(queue.add("one"));

System.out.println(queue.add("two"));

System.out.println(queue);

System.out.println(queue.add("three"));

System.out.println(queue);

}

}

运行以上程序时,我们将得到以下输出:

true

true

[one, two]

Exception in thread "main" java.lang.IllegalStateException: Queue full

由于我们的队列仅限于两个元素,当我们尝试使用BlockingQueue.add()添加第三个元素时,就会抛出上述异常。

排队的 offer() 操作

offer()操作用于将新元素插入队列。如果成功执行插入操作,它将返回”true”;否则,它将返回”false”。让我们开发一个简单的示例来展示这个功能。

import java.util.concurrent.*;

public class QueueOfferOperation {

public static void main(String[] args) {

BlockingQueue queue = new ArrayBlockingQueue<>(2);

System.out.println(queue.offer("one"));

System.out.println(queue.offer("two"));

System.out.println(queue);

System.out.println(queue.offer("three"));

System.out.println(queue);

}

}

当我们运行上述程序时,我们将获得如下输出:

true

true

[one, two]

false

[one, two]

由于我们的队列限制了只能包含两个元素,在我们试图使用BlockingQueue.offer()操作添加第三个元素时,它返回了”false”值,就像上面所示。

Java 队列的删除操作

在本部分中,我们将详细讨论Java队列删除操作,并提供一些有用的示例。如果删除成功,删除操作将返回队列的头元素。正如我们所知,队列支持两种形式的删除操作:

Queue.remove():

It throws an exception if the operation fails.- Queue.poll():

It returns a special value if the operation fails.

请注意:这里特殊的值可以是“false”或“null”。

队列的移除操作

remove()操作用于从队列的头部删除一个元素。如果成功执行删除操作,则返回队列的头部元素。否则,它会抛出java.util.NoSuchElementException异常。让我们开发一个简单的示例来演示这个功能。

import java.util.*;

public class QueueRemoveOperation

{

public static void main(String[] args)

{

Queue queue = new LinkedList<>();

queue.offer("one");

queue.offer("two");

System.out.println(queue);

System.out.println(queue.remove());

System.out.println(queue.remove());

System.out.println(queue.remove());

}

}

当我们运行上述程序时,我们将获得以下输出结果:

[one, two]

one

two

Exception in thread "main" java.util.NoSuchElementException

因为队列只有两个元素,当我们尝试第三次调用remove()方法时,它会抛出上述的异常。注意:Queue.remove(element)方法用于从队列中删除指定的元素。如果删除成功,它会返回“true”值,否则返回“false”值。

队列的poll()操作

使用poll()操作从队列头部删除一个元素。如果成功执行删除操作,则返回队列的头元素。否则返回“null”值。让我们开发一个简单的示例来演示该功能。

import java.util.*;

public class QueuePollOperation

{

public static void main(String[] args)

{

Queue queue = new LinkedList<>();

queue.offer("one");

queue.offer("two");

System.out.println(queue);

System.out.println(queue.poll());

System.out.println(queue.poll());

System.out.println(queue.poll());

}

}

当我们运行上面的程序时,我们会得到以下输出结果:

[one, two]

one

two

null

由于我们的队列只有两个元素,当我们尝试第三次调用poll()方法时,返回的值为null,如上所示。

Java队列检查操作

在这个部分,我们将详细讨论Java队列的检查操作,并附上一些有用的示例。如果此操作成功执行,它将返回队列的头元素而不移除它。正如我们所知,队列支持两种形式的检查操作:

Queue.element():

It throws an exception if the operation fails.- Queue.peek():

It returns a special value if the operation fails.

请注意:这里的特殊值可以是“false”或“null”。

队列的元素()操作

使用element()操作可以从队列的头部检索一个元素,而不将其移除。如果运行成功进行检查操作,则返回队列的头元素。否则,它会抛出java.util.NoSuchElementException异常。让我们开发一个简单的示例来演示这个功能。

import java.util.*;

public class QueueElementOperation {

public static void main(String[] args) {

Queue queue = new LinkedList<>();

queue.add("one");

System.out.println(queue.element());

System.out.println(queue);

queue.clear();

System.out.println(queue.element());

}

}

输出:当我们运行上述程序时,我们将得到以下输出:

one

[one]

Exception in thread "main" java.util.NoSuchElementException

如果我们试图在空队列上调用element()方法,就会像上面显示的那样抛出一个异常。

查询队列的顶部元素。

使用 peek() 操作可以从队列头部检索一个元素,而不将其移除。如果检索操作成功,它会返回队列的头部元素。否则,返回 null 值。让我们开发一个简单的示例来演示这个功能。

import java.util.*;

public class QueuePeekOperation {

public static void main(String[] args) {

Queue queue = new LinkedList<>();

queue.add("one");

System.out.println(queue.peek());

System.out.println(queue);

queue.clear();

System.out.println(queue.peek());

}

}

当我们运行以上程序时,我们会得到以下输出。

one

[one]

null

如果我们在空队列上尝试调用peek()方法,它会返回null值,但是不会像上面那样抛出异常。

Java队列分类

在Java中,我们可以找到许多队列实现。我们可以将它们广泛分为以下两种类型

有界队列

无界队列

有界队列是通过容量限制的队列,这意味着我们需要在创建时提供队列的最大容量大小。例如ArrayBlockingQueue(见之前的示例)。无界队列是没有容量限制的队列,这意味着我们不需要提供队列的大小。例如LinkedList(见之前的示例)。所有在java.util包中可用的队列都是无界队列,而在java.util.concurrent包中可用的队列都是有界队列。换句话说,我们可以广泛将它们归类为以下两种类型:

阻塞队列

非阻塞队列

所有实现BlockingQueue接口的队列都是阻塞队列,其余的队列都是非阻塞队列。阻塞队列会在完成任务或超时前一直阻塞,而非阻塞队列则不会。一些队列是双端队列,而另一些队列是优先级队列。

阻塞队列的操作

除了Queue的两种操作形式外,BlockingQueue还支持下面两种形式的操作。

操作

抛出异常

特殊值

阻塞

超时

插入

add(e)

offer(e)

put(e)

offer(e, time, unit)

移除

remove()

poll()

take()

poll(time, unit)

检查

element()

peek()

N/A

N/A

一些操作在完成其工作之前会被阻塞,而其他操作则会在超时之前被阻塞。这就是关于Java中队列的简要概述。希望这些Java队列示例能帮助你入门队列集合编程。如果你喜欢我的教程,有任何建议、问题或打字错误,请给我留言。谢谢。