java queue_Java Queue队列使用入门详解

本文详细介绍了Java中的Queue接口,包括其作为FIFO数据结构的特点、使用LinkedList作为Queue实现、基本的Enqueue和Dequeue操作,以及如何检查队列状态、查找元素、迭代队列等。
摘要由CSDN通过智能技术生成

一、什么是Queue?

4480ef1182b5b0eb2d98b5f9ebef2f99.png

队列是先进先出(FIFO)数据结构。它在现实生活中模拟队列(排队)。是的,你可能在电影院,购物中心,地铁或公共汽车前看到过的那个排队。

就像现实生活中的队列一样,队列数据结构中的新元素会添加到后面并从前面移除。可以显示队列,如下图所示。

d63063dbc35d50a5a5ce49f7f162ba0f.png

在Queue后面添加元素的过程称为Enqueue,从队列前面删除元素的过程称为Dequeue。

Java提供了一个Queue接口,它是Java集合框架的一部分。下图描述了集合层次结构中Queue接口的位置 -

456.html

Java中的Queue只是一个接口。我们需要在我们的程序中使用Queue接口的具体实现。

如上图所示,LinkedList类实现了Queue接口,因此可以用作Queue。

二、创建队列并执行Enqueue和Dequeue等基本操作

23fd5a2e7b5f15e7526d882d000fc13c.png

import java.util.LinkedList;

import java.util.Queue;

public class QueueExample {

public static void main(String[] args) {

// 使用LinkedList创建并初始化一个队列

Queue waitingQueue = new LinkedList<>();

//给队列添加元素(Enqueue 操作)

waitingQueue.add("Rajeev");

waitingQueue.add("Chris");

waitingQueue.add("John");

waitingQueue.add("Mark");

waitingQueue.add("Steven");

System.out.println("WaitingQueue : " + waitingQueue);

// 从队列中删除元素( Dequeue操作)

// 使用remove()方法删除元素时候,如果队列是空的,会抛出NoSuchElementException异常

String name = waitingQueue.remove();

System.out.println("Removed from WaitingQueue : " + name + " | New WaitingQueue : " + waitingQueue);

// 使用poll()方法删除队列中的元素

//poll()方法和remove()相似,唯一的区别是当队列为空时候poll()返回null

name = waitingQueue.poll();

System.out.println("Removed from WaitingQueue : " + name + " | New WaitingQueue : " + waitingQueue);

}

}

输出:

WaitingQueue : [Rajeev, Chris, John, Mark, Steven]

Removed from WaitingQueue : Rajeev | New WaitingQueue : [Chris, John, Mark, Steven]

Removed from WaitingQueue : Chris | New WaitingQueue : [John, Mark, Steven]

三、队列内部其他方法操作

23fd5a2e7b5f15e7526d882d000fc13c.png

检查队列是否为空。

找到队列的大小。

在队列中搜索元素。

将元素放在队列的前面而不删除它。

import java.util.LinkedList;

import java.util.Queue;

public class QueueSizeSearchFrontExample {

public static void main(String[] args) {

Queue waitingQueue = new LinkedList<>();

waitingQueue.add("Jennifer");

waitingQueue.add("Angelina");

waitingQueue.add("Johnny");

waitingQueue.add("Sachin");

System.out.println("WaitingQueue : " + waitingQueue);

//检查Queue 是否为空

System.out.println("is waitingQueue empty? : " + waitingQueue.isEmpty());

//获取Queue的大小

System.out.println("Size of waitingQueue : " + waitingQueue.size());

// 查找Queue中是否包含某个元素

String name = "Johnny";

if(waitingQueue.contains(name)) {

System.out.println("WaitingQueue contains " + name);

} else {

System.out.println("Waiting Queue doesn't contain " + name);

}

//获得一个第一的元素,但是不删除该元素 使用element()方法

// 当队列是空的时候element() 方法将会抛出 NoSuchElementException 异常

String firstPersonInTheWaitingQueue = waitingQueue.element();

System.out.println("First Person in the Waiting Queue (element()) : " + firstPersonInTheWaitingQueue);

//peek() 方法和 element() 相似,唯一区别是当队列为空时候peek()方法返回值为null

firstPersonInTheWaitingQueue = waitingQueue.peek();

System.out.println("First Person in the Waiting Queue : " + firstPersonInTheWaitingQueue);

}

}

输出:

WaitingQueue : [Jennifer, Angelina, Johnny, Sachin]

is waitingQueue empty? : false

Size of waitingQueue : 4

WaitingQueue contains Johnny

First Person in the Waiting Queue (element()) : Jennifer

First Person in the Waiting Queue : Jennifer

四、在Java中迭代队列

23fd5a2e7b5f15e7526d882d000fc13c.png

本节中的示例显示了迭代队列的各种方法:

使用Java 8 forEach()方法迭代队列。

使用iterator()迭代队列。

使用iterator()和Java 8 forEachRemaining()方法迭代队列。

使用简单的for-each循环迭代队列。

队列中的迭代顺序与插入顺序相同。

import java.util.Iterator;

import java.util.LinkedList;

import java.util.Queue;

public class IterateOverQueueExample {

public static void main(String[] args) {

Queue waitingQueue = new LinkedList<>();

waitingQueue.add("John");

waitingQueue.add("Brad");

waitingQueue.add("Angelina");

waitingQueue.add("Julia");

System.out.println("=== Iterating over a Queue using Java 8 forEach() ===");

waitingQueue.forEach(name -> {

System.out.println(name);

});

System.out.println("\n=== Iterating over a Queue using iterator() ===");

Iterator waitingQueueIterator = waitingQueue.iterator();

while (waitingQueueIterator.hasNext()) {

String name = waitingQueueIterator.next();

System.out.println(name);

}

System.out.println("\n=== Iterating over a Queue using iterator() and Java 8 forEachRemaining() ===");

waitingQueueIterator = waitingQueue.iterator();

waitingQueueIterator.forEachRemaining(name -> {

System.out.println(name);

});

System.out.println("\n=== Iterating over a Queue using simple for-each loop ===");

for(String name: waitingQueue) {

System.out.println(name);

}

}

}

输出:

=== Iterating over a Queue using Java 8 forEach() ===

John

Brad

Angelina

Julia

=== Iterating over a Queue using iterator() ===

John

Brad

Angelina

Julia

=== Iterating over a Queue using iterator() and Java 8 forEachRemaining() ===

John

Brad

Angelina

Julia

=== Iterating over a Queue using simple for-each loop ===

John

Brad

Angelina

Julia

五、总结

0fd4b37d1f7d0842a943fbe3c2ff4239.png

这就是所有!在本文中,您了解了什么是Queue数据结构,如何在Java中创建Queue,如何向Queue添加新元素,如何从Queue中删除元素以及如何在Queue中搜索元素。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值