java中的Queue队列的用法

简介: java中的Queue队列的用法

大家好,欢迎来到雄雄的小课堂,今天给大家分享的是“java中的Queue队列的用法”

前言:好多人对Queue不是很熟悉,毕竟平时也不怎么用,遇到集合要么List要么map这些常用的,殊不知,java中还有个Queue,今天,我们就来看看Queue的用法。

何为队列?

队列是一种特殊数据结构,它只允许在表的前端进行删除操作,而在表的后端进行插入操作,“先进先出”的场景,和我们生活中的排队类似,谁先来先给谁办理。

Queue队列

Java中,LinkedList类就是实现的Queue接口,因此,我们可以把LinkedList当成队列来使用。

先来看看Queue接口的源码,然后每个方法每个方法的看:

package java.util;
public interface Queue<E> extends Collection<E> {
    
    boolean add(E e);
    
    boolean offer(E e);
   
    E remove();
    
    E poll();
    
    E element();
   
    E peek();
}

插入元素:

其中,add方法和offer方法都是可以在队列的尾部添加元素,代码如下:

public static void main(String[] args) {
    Queue<String> list = new LinkedList<String>();
    //添加元素
    list.add("a");
    list.offer("b");
    list.offer("c");
    list.offer("d");
    System.out.println("元素列表:");
    //遍历
    for (String s : list) {
      System.out.print(s+" ");
    }
  
  }

运行结果如下:

add方法和offer方法的区别:

虽然两个方法都可以实现添加,但是如果队列满的时候,使用add方法时就会报错,而offer方法就不一样了,它在添加失败时不会直接报错,而是会返回false。

删除元素:

remove方法和poll方法都是删除队列中的第一个元素,代码示例如下:

public static void main(String[] args) {
    Queue<String> list = new LinkedList<String>();
    //添加元素
    list.add("a");
    list.offer("b");
    list.offer("c");
    list.offer("d");
    System.out.println("元素列表:");
    //遍历
    for (String s : list) {
      System.out.print(s+" ");
    }
    System.out.println("\n---------\n调用remove方法");
    list.remove();
    //遍历
    for (String s : list) {
      System.out.print(s+" ");
    }
    System.out.println("\n---------\n调用poll方法");
    list.poll();
    //遍历
    for (String s : list) {
      System.out.print(s+" ");
    }
    
  }

运行结果如下:

remove方法和poll方法的区别:

当队列为空时 remove() 方法会报 NoSuchElementException 错; 而 poll() 不会奔溃,只会返回 null。

返回队列的第一个元素:

element方法和peek方法都是返回队列中的第一个元素,代码示例如下:

public static void main(String[] args) {
    Queue<String> list = new LinkedList<String>();
    //添加元素
    list.add("a");
    list.offer("b");
    list.offer("c");
    list.offer("d");
    System.out.println("元素列表:");
    //遍历
    for (String s : list) {
      System.out.print(s+" ");
    }
    System.out.println("\n---------\n调用remove方法");
    list.remove();
    //遍历
    for (String s : list) {
      System.out.print(s+" ");
    }
    System.out.println("\n---------\n调用poll方法");
    list.poll();
    //遍历
    for (String s : list) {
      System.out.print(s+" ");
    }
    System.out.println("\n-------------");
    System.out.println("队列中的第一个元素是:"+list.element());
    System.out.println("队列中的第一个元素是:"+list.peek());
    
    
  }

运行结果如下:

element方法和peek方法的区别:

和remove方法一样,当队列为空时,调用element方法会抛出异常,而peek则会返回null。


目录
相关文章
|
18天前
|
Java
Java中的抽象类:深入了解抽象类的概念和用法
Java中的抽象类是一种不能实例化的特殊类,常作为其他类的父类模板,定义子类行为和属性。抽象类包含抽象方法(无实现)和非抽象方法。定义抽象类用`abstract`关键字,子类继承并实现抽象方法。抽象类适用于定义通用模板、复用代码和强制子类实现特定方法。优点是提供抽象模板和代码复用,缺点是限制继承灵活性和增加类复杂性。与接口相比,抽象类可包含成员变量和单继承。使用时注意设计合理的抽象类结构,谨慎使用抽象方法,并遵循命名规范。抽象类是提高代码质量的重要工具。
33 1
|
1月前
|
XML Java 编译器
java aspectjrt AOP 用法
java aspectjrt AOP 用法
21 0
|
3天前
|
存储 Java C++
Java集合篇之深度解析Queue,单端队列、双端队列、优先级队列、阻塞队列
Java集合篇之深度解析Queue,单端队列、双端队列、优先级队列、阻塞队列
17 0
|
8天前
|
JSON Java 数据格式
Java QueryWrapper基本用法
Java QueryWrapper基本用法
13 2
|
存储 算法 安全
【Java 数据结构及算法实战】系列 014:Java队列08——数组实现的双端队列ArrayDeque
【Java 数据结构及算法实战】系列 014:Java队列08——数组实现的双端队列ArrayDeque
138 0
【Java 数据结构及算法实战】系列 014:Java队列08——数组实现的双端队列ArrayDeque
|
存储 算法 安全
【Java数据结构及算法实战】系列012:Java队列06——数组实现的优先级阻塞队列PriorityBlockingQueue
【Java数据结构及算法实战】系列012:Java队列06——数组实现的优先级阻塞队列PriorityBlockingQueue
117 0
|
存储 算法 安全
【Java数据结构及算法实战】系列009:Java队列03——数组实现的阻塞队列ArrayBlockingQueue
顾名思义,ArrayBlockingQueue是基于数组实现的有界阻塞队列。该队列对元素进行FIFO排序。队列的首元素是在该队列中驻留时间最长的元素。队列的尾部是在该队列中停留时间最短的元素。新的元素被插入到队列的尾部,队列检索操作获取队列头部的元素。
120 0
|
4天前
|
安全 Java 调度
Java线程:深入理解与实战应用
Java线程:深入理解与实战应用
23 0
|
1天前
|
缓存 Java
Java并发编程:深入理解线程池
【4月更文挑战第26天】在Java中,线程池是一种重要的并发工具,它可以有效地管理和控制线程的执行。本文将深入探讨线程池的工作原理,以及如何使用Java的Executor框架来创建和管理线程池。我们将看到线程池如何提高性能,减少资源消耗,并提供更好的线程管理。