Java 中的 Enqueue 和 Dequeue
在我们进入 Java 中 enqueue
和 dequeue
的概念之前,让我们对 Queue 的整个概念有一个基本的了解。它究竟是什么?现实世界的例子等等。让我们潜入。
队列
就编程而言,队列是一种线性结构,具有单向顺序,该数据类型通过该结构执行。单向顺序是 FIFO(先进先出)。一个真实的例子是你在银行外面看到的人(队列)。谁先到,谁先上菜,谁先出去。所以,当我们在编程中说 enqueue
和 dequeue
时,我们的意思是分别添加和删除一个项目。看看下面的图片。
如你所见,队列中的添加(入队)总是从后面,移除(出队)总是从前面。既然对队列有了具体的了解,接下来我们来看看队列在 Java 中的实现。
Java 中的队列
在 Java 中,队列被看作是一个由链表实现的接口。下面的代码示例展示了如何在 Java 中创建队列的对象。
import java.util.LinkedList; // Class Which implements queue list etc.
import java.util.Queue; //queue is an iterface
public class Main
{
public static void main(String[] args)
{
Queue<String> queue = new LinkedList<>();
//to implement Queue
}
}
你需要添加链表和队列的类才能在 Java 中实现。(见代码顶部)。在实现队列时,我们为此使用链表。现在让我们了解在队列中添加和删除项目所涉及的方法。
Java 中的入队和出队
如上所述,这些类型的操作的顺序是 FIFO。所以,让我们在我们创建的队列中添加(enqueue
)一些值。由于队列是一个字符串,因此以下值就足够了。
import java.util.LinkedList; // Class Which implements queue list etc.
import java.util.Queue; //queue is an iterface
public class Main
{
public static void main(String[] args)
{
Queue<String> queue = new LinkedList<>();
//to implement Queue
//Adding In Queue using `add()` method
queue.add("Bill Gates"); //enque
queue.add("Mark Mark Zuckerberg"); // enque
queue.add("Elon Musk"); //enquue
queue.add("Jeff Bezos");
queue.offer("Donald Trump"); // alternatice enque
System.out.println("Queue : " + queue); //queue print
}
}
在上面的示例中,我们使用以下两种方法添加了四个值。
queue.add()
正如你在代码中看到的,我们在队列中添加了四个字符串值。关于这个方法你应该知道的另一件事是它抛出一个未经检查的异常。例如,如果你的队列受到限制,add()
方法将在添加另一个元素时返回一个异常,而它没有空间。这一切都取决于队列的性质。在这里了解有关 Java 中队列的更多信息。
queue.offer()
offer()
方法是 add()
的替代方法。此特定方法不会引发异常。相反,它给出真值和假值。在上面的例子中,我们使用 offer()
添加了队列中的第五个元素。上述程序的输出如下。
Queue : [Bill Gates, Mark Zuckerberg, Elon Musk, Jeff Bezos, Donald Trump]
现在你已经了解了如何(入队
)在队列中添加元素。让我们看看如何从队列中删除一个项目。
queue.remove()
remove()
方法用于从队列中删除一个元素。它将在队列的最前面进行操作。例如,如果我们要从上述队列中移除一个元素,第一个被移除的元素将是 Bill Gates
。看看下面的代码。
import java.util.LinkedList; // Class Which implements queue list etc.
import java.util.Queue; //queue is an iterface
public class Main
{
public static void main(String[] args)
{
Queue<String> queue = new LinkedList<>();
//to implement Queue
//Adding In Queue using `add()` method
queue.add("Bill Gates"); //enque
queue.add("Mark Mark Zuckerberg"); // enque
queue.add("Elon Musk"); //enquue
queue.add("Jeff Bezos");
queue.offer("Donald Trump"); // alternatice enque
System.out.println("Queue : " + queue); //queue print
String name = queue.remove(); //Dequeue
System.out.println("Removed from queue : " + name );
System.out.println(queue);
name= queue.poll(); // altrenative deque method
System.out.println("Removed from queue : " + name );
System.out.println(queue);
}
}
正如你在上面的代码示例中看到的,我们使用了 remove()
方法来从队列中删除一个项目。如果你尝试从空队列中删除元素,它将引发未经检查的异常。
queue.poll()
remove()
的替代方法是 poll()
,它在从空队列中删除元素时返回 NULL
值。看一下上面代码的输出。
Queue : [Bill Gates, Mark Mark Zuckerberg, Elon Musk, Jeff Bezos, Donald Trump]
Removed from queue : Bill Gates
[Mark Mark Zuckerberg, Elon Musk, Jeff Bezos, Donald Trump]
Removed from queue : Mark Mark Zuckerberg
[Elon Musk, Jeff Bezos, Donald Trump]