zoukankan      html  css  js  c++  java
  • 【JAVA】【集合16】Java中的Queue接口

    一、Queue定义

    队列(queue)是一组有序的元素,提取元素时按顺序 从队头读取 。队列一般 按照插入元素的顺序 实现可分成两类:

    1. 先进先出(first-in, first-out,FIFO)队列

    2. 后进先出(last-in, first-out,LIFO)队列
      其中,LIFO 队列也叫栈(stack)。Java 提供了 Stack 类,但强烈不建议使用 Stack 类,建议使用使用 Queque 接口的实现类。


    Queue与List、Set的区别:

    1. 与 List 不同的是:Queue 接口没有定义处理任意 索引位 元素的方法,只有队列的头一个元素能访问。

    2. 与 Set 不同的是:Queue 的实现往往 允许出现重复 的元素。


    Queue的所有实现都要具有一个固定的容量

    1. 队列已满时,不能再添加元素。

    2. 队列为空时,不能再删除元素。

    3. 基于队列的算法都会用到 这两个状态,所以 Queue 接口的方法通过返回值表明这两个状态,而不会抛出异常。具体而言,peek() 和 poll() 方法返回 null 表示队列为空,因此,多数 Queue 接口的实现不允许用 null 作元素


    队列也可以使用其他顺序,如:

    • 优先队列(priority queue)根据外部 Comparator 对象或 Comparable 类型元素的自然顺序排序元素。

    阻塞式队列(blocking queue): 是一种定义了阻塞式 put() 和 take() 方法的队列。

    • put() 方法的作用是把元素添加到队列中。阻塞式队列中,如果需要,这个方法会一直等待,直到队列中有存储元素的空间为止。
    • 而 take() 方法的作用是从队头移除元素。阻塞式队列中,如果需要,这个方法会一直等待,直到队列中有元素可供移除为止。
    • 阻塞式队列是很多多线程算法的重要组成部分,因此 BlockingQueue 接口(扩展 Queue 接口)在 java.util.concurrent 包中定义。

    Queue接口在java.util.Queue包中定义,如下:

    public interface Queue<E> extends Collection<E>
    

    二、常用方法

    1. 添加元素

    boolean add(E e);
    

    向队列中添加指定元素。对于有界队列,成功时返回true,如果当前没有可用空间,则抛出非法状态异常。

    boolean offer(E e);
    

    向队列中添加指定元素。对于有界队列,由于有界的队列已满而无法添加元素时,这个方法返回 false,而不会抛出异常。

    2. 提取元素

    E remove();
    

    移除并返回队头的元素。如果队列为空,这个方法会抛出 NoSuchElementException 异常

    E poll();
    

    作用和 remove() 方法类似,移除并返回队头的元素, 不过,如果队列为空,这个方法会返回 null,而不抛出异常。

    E element();
    

    其作用是返回队头的元素,但不将其从队列中移除。如果队列为空,这个方法抛出 NoSuchElementException 异常

    E peek();
    

    作用和 element() 方法类似,但队列为空时,返回 null;

  • 相关阅读:
    Java异常超详细总结
    ArrayList去除集合中字符串的重复值
    scrum项目冲刺_day09
    scrum项目冲刺_day08
    scrum项目冲刺_day07
    scrum项目冲刺_day06
    scrum项目冲刺_day05
    scrum项目冲刺_day04
    scrum项目冲刺_day03
    scrum项目冲刺_day02
  • 原文地址:https://www.cnblogs.com/yickel/p/14794474.html
Copyright © 2011-2022 走看看