解析Java中的队列和用LinkedList集合模拟队列的方法

 更新时间:2015年08月06日 10:27:53   作者:zinss26914   我要评论
这篇文章主要介绍了解析Java中的队列和用LinkedList集合模拟队列的方法,相关算法的实现也是ACM中的常见题目,需要的朋友可以参考下

API中对队列的说明:
 

public interface Queue<E>
extends Collection<E>

在处理元素前用于保存元素的 collection。除了基本的 Collection 操作外,队列还提供其他的插入、提取和检查操作。每个方法都存在两种形式:一种抛出异常(操作失败时),另一种返回一个特殊值(null 或 false,具体取决于操作)。插入操作的后一种形式是用于专门为有容量限制的 Queue 实现设计的;在大多数实现中,插入操作不会失败。

201586102759996.jpg (209×150)

队列通常(但并非一定)以 FIFO(先进先出)的方式排序各个元素。不过优先级队列和 LIFO 队列(或堆栈)例外,前者根据提供的比较器或元素的自然顺序对元素进行排序,后者按 LIFO(后进先出)的方式对元素进行排序。无论使用哪种排序方式,队列的头 都是调用 remove() 或 poll() 所移除的元素。在 FIFO 队列中,所有的新元素都插入队列的末尾。其他种类的队列可能使用不同的元素放置规则。每个 Queue 实现必须指定其顺序属性。
如果可能,offer 方法可插入一个元素,否则返回 false。这与 Collection.add 方法不同,该方法只能通过抛出未经检查的异常使添加元素失败。offer 方法设计用于正常的失败情况,而不是出现异常的情况,例如在容量固定(有界)的队列中。
remove() 和 poll() 方法可移除和返回队列的头。到底从队列中移除哪个元素是队列排序策略的功能,而该策略在各种实现中是不同的。remove() 和 poll() 方法仅在队列为空时其行为有所不同:remove() 方法抛出一个异常,而 poll() 方法则返回 null。
element() 和 peek() 返回,但不移除,队列的头。
Queue 接口并未定义阻塞队列的方法,而这在并发编程中是很常见的。BlockingQueue 接口定义了那些等待元素出现或等待队列中有可用空间的方法,这些方法扩展了此接口。
Queue 实现通常不允许插入 null 元素,尽管某些实现(如 LinkedList)并不禁止插入 null。即使在允许 null 的实现中,也不应该将 null 插入到 Queue 中,因为 null 也用作 poll 方法的一个特殊返回值,表明队列不包含元素。
Queue 实现通常未定义 equals 和 hashCode 方法的基于元素的版本,而是从 Object 类继承了基于身份的版本,因为对于具有相同元素但有不同排序属性的队列而言,基于元素的相等性并非总是定义良好的。

在java里使用队列可以用LinkedList集合进行模拟


方法
使用LinkedList集合,并使用其中的addLast、removeFirst、isEmpty等API集体模拟队列操作

入队列

  void addLast(E e); // 将元素插入此列表的结尾 

出队列

  E removeFirst(); // 移除并返回列表的第一个元素 

判空

  boolean isEmpty(); // 判断队列是否为空  

示例代码

    

package coreJavaOne; 
  import java.util.LinkedList; 
  import java.util.NoSuchElementException; 
  public class SimulateQueue { 
    private LinkedList<Integer> queue = new LinkedList<Integer>(); 
    public boolean isEmpty() { 
      return this.queue.isEmpty(); 
    } 
    public void enQueue(int data) { 
      this.queue.addLast(data); 
    } 
    public int deQueue() throws NoSuchElementException { 
      return this.queue.removeFirst(); 
    } 
    public static void main(String[] args) { 
      SimulateQueue q = new SimulateQueue(); 
      q.enQueue(1); 
      q.enQueue(2); 
      q.enQueue(3); 
      while (! q.isEmpty()) { 
        int data = q.deQueue(); 
        System.out.println(data); 
      } 
    } 
  } 

相关文章

  • 基于字符串常用API(详解)

    基于字符串常用API(详解)

    下面小编就为大家带来一篇基于字符串常用API(详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-06-06
  • 详解Spring Boot 配置多个RabbitMQ

    详解Spring Boot 配置多个RabbitMQ

    本篇文章主要介绍了Spring Boot 配置多个RabbitMQ,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-06-06
  • 运行java的class文件方法详解

    运行java的class文件方法详解

    这篇文章主要详细介绍了运行java的class文件方法的相关资料,需要的朋友可以参考下
    2015-02-02
  • java使用Memcached简单教程

    java使用Memcached简单教程

    本文主要记录Memcached的一些基本使用和简单的Monitor,大家参考使用吧
    2013-12-12
  • 深入理解Java中HashCode方法

    深入理解Java中HashCode方法

    这篇文章主要介绍了深入理解Java中HashCode方法,具有一定借鉴价值,需要的朋友可以参考下
    2018-01-01
  • java获取当前时间的四种方法代码实例

    java获取当前时间的四种方法代码实例

    这篇文章主要介绍了java获取当前时间的四种方法代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • java中out.print和out.write的方法

    java中out.print和out.write的方法

    本文用一个小例子说明java out.print和out.write的方法,大家参考使用吧
    2013-11-11
  • java实现mp3合并的方法

    java实现mp3合并的方法

    这篇文章主要介绍了java实现mp3合并的方法,是Java操作多媒体文件的一个典型应用,非常具有参考借鉴价值,需要的朋友可以参考下
    2014-10-10
  • Java Swing组件下拉菜单控件JComboBox用法示例

    Java Swing组件下拉菜单控件JComboBox用法示例

    这篇文章主要介绍了Java Swing组件下拉菜单控件JComboBox用法,结合具体实例形式分析了Swing组件下拉菜单控件JComboBox的具体定义、使用方法及相关使用注意事项,需要的朋友可以参考下
    2017-11-11
  • 利用java制作一个小的目录查询器的方法

    利用java制作一个小的目录查询器的方法

    下面小编就为大家带来一篇利用java制作一个小的目录查询器的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-01-01

最新评论