leftso 2832 0 2018-07-04 19:40:54

logo-cover-Java Queue队列使用入门详解

一、什么是Queue?surprise

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

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

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

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

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

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

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

import java.util.LinkedList;
import java.util.Queue;

public class QueueExample {
    public static void main(String[] args) {
        // 使用LinkedList创建并初始化一个队列 
        Queue<String> 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]

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

  • 检查队列是否为空。
  • 找到队列的大小。
  • 在队列中搜索元素。
  • 将元素放在队列的前面而不删除它。
import java.util.LinkedList;
import java.util.Queue;

public class QueueSizeSearchFrontExample {
    public static void main(String[] args) {
        Queue<String> 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中迭代队列cool

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

  • 使用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<String> 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<String> 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

五、总结laugh

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

编程技术 Queue Java 队列