Queue特性和基本方法

Queue实现一个先进先出(FIFO, First In First Out)的队列。如收银台排队支付。

Java中LinkedList实现了Queue接口,可以直接把LinkedList当作Queue来使用。

  • 获取队列长度size()
  • 添加元素到队尾boolean add(E e)/boolean offer(E e)
  • 获取队列头部元素并删除 E remove()/E poll()
  • 获取队列头部元素但不删除E element()/E peek()

为什么添加和获取元素提供2组方法?

当添加或获取元素失败时,1个抛出异常,另1个返回false或null。

throw Exception 返回false或null
添加元素到队尾 add(E e) boolean offer(E e)
取对首元素并删除 E remove() E poll()
取队首元素但不删除 E element() E peek()

失败场景示例:

  • 1.如果队列有一个最大长度限制,可能添加失败
//演示代码
Queue q = ...;
if (q.offer("abc")){
//添加成功
}else{
//添加失败
}
  • 2.如果队列是空队列,队首元素获取失败。
//演示代码
Queue q = ...;
if (q.isEmpty()){
//不能获取队首元素
}else{
//可以获取队首元素
}

示例

Person.java

public class Person {
private String name;
private int age;
public Person(String name,int age){
this.name = name;
this.age = age;
}
public String getName(){
return this.name;
}
public int getAge(){
return this.age;
}
@Override
public String toString(){
return "(Person:"+name+","+age+")";
}
public boolean equals(Object o){
if (this == o){
return true;
}
if (o instanceof Person){
Person p = (Person) o;
return Objects.equals(p.name,this.name) && p.age == this.age; }
return false;
}
}

Main.java

public class Main {
public static void main(String[] args) throws IOException {
Queue<Person> queue = new LinkedList<>();
queue.offer(new Person("小明",12));
queue.offer(new Person("小红",12));
queue.offer(new Person("小军",12));
System.out.println(queue.poll());
System.out.println(queue.poll());
System.out.println(queue.poll());
System.out.println(queue.poll()); }
}


```#java
public class Main {
public static void main(String[] args) throws IOException {
Queue queue = new LinkedList();
queue.offer(new Person("小明",12));
queue.offer(new Person("小红",12));
queue.offer(new Person("小军",12));
System.out.println(queue.poll());
System.out.println(queue.poll());
System.out.println(queue.poll());
System.out.println(queue.remove());
}
}
```

```#java
public class Main {
public static void main(String[] args) throws IOException {
Queue queue = new LinkedList();
queue.offer(new Person("小明",12));
queue.offer(new Person("小红",12));
queue.offer(new Person("小军",12));
System.out.println(queue.poll());
System.out.println(queue.poll());
System.out.println(queue.poll());
//改写代码,先判断队列是否为空
if (!queue.isEmpty()) {
System.out.println(queue.remove());
}
}
}
```

总结

  • Queue实现一个FIFO的队列
  • add/offer将元素添加到队尾
  • remove/poll从队首获取元素并删除
  • element/peek从队首获取元素但不删除
  • 避免把null添加到队列

廖雪峰Java5Java集合-5Queue-1使用Queue的更多相关文章

  1. 廖雪峰Java5集合-3Map-1使用Map

    廖雪峰的视频不全,以下是疯狂Java关于Map的讲解 1.Map定义 Map是一种键值映射表,可以通过key快速查找value,同python的dict.key不允许重复,value可以重复. Map ...

  2. 廖雪峰Java5集合-4Set-1使用Set

    集合 Set用于存储不重复的元素集合: boolean add(E e) boolean remove(Object o) boolean contains(Object o) int size() ...

  3. 廖雪峰Java5集合-1Java集合简介-1Java结合简介

    1.集合 定义:集合就是一堆东西.集合里的东西,称为元素Element 数学中的集合: 有限集合: * 一个班所有的学生组成的集合 * 一个网站所有的商品组成的集合 无限集合: * 全体自然数集合 * ...

  4. 廖雪峰Java5集合-6Stack-1使用Stack

    1.栈的定义 栈Stack是一种后进先出(LIFO: Last In First Out)的数据结构,可以看作一端封闭的容器,先进去的元素永远在底部,最后出来. 栈有2个重要的方法: push(E e ...

  5. 廖雪峰Java5集合-3Map-Properties的使用

    Properties用于读取配置 properties文件只能使用ASCII码 #表示注释 可以从文件系统读取.properties文件 Properties props = new Properti ...

  6. 廖雪峰Java5集合-2List-2编写equals方法

    List是一种有序链表: List内部按照放入元素的先后顺序存放 每个元素都可以通过索引确定自己的位置 boolean contains(Object o) 是否包含某个元素 int indexOf( ...

  7. 廖雪峰Java5集合-2List-1使用List

    1.List定义 List是一种有序链表: List内部按照元素的先后顺序存放 每个元素都可以通过索引确定自己的位置 类似数组,但大小可变 //List<E>是一种有序链表: //* Li ...

  8. 爬取廖雪峰的python3教程

    从廖雪峰老师的python教程入门的,最近在看python爬虫,入手了一下 代码比较low,没有用到多线程和ip代理池 然后呢,由于robots.txt的限定,构建了一些user-agent,并放慢的 ...

  9. 廖雪峰Java6 IO编程-2input和output-4Filter模式

    1.JDK提供的InputStream分为两类: 直接提供数据的InputStream * FileInputStream:从文件读取 * ServletInputStream:从HTTP请求读取数据 ...

随机推荐

  1. hdu4300 Clairewd’s message 扩展KMP

    Clairewd is a member of FBI. After several years concealing in BUPT, she intercepted some important ...

  2. Tomcat端口被占用解决办法

    1.在cmd运行窗口中输入netstat -ano 查看当前被占用的端口所对应的进城PID: 2.输入命令tasklist,找到进程号PID对应的进程名称(映像名称) 3.打开任务管理器(ctrl+a ...

  3. python------Json与pickle数据序列化

    一.json序列化 xml在被json取代,不同平台之间的语言转换,只能处理简单的.复杂的用pickle: pickle只能在python中用,而在Java中json也可以被识别. info = { ...

  4. 我的TDD实践---TDD概念篇

    “我的TDD实践”系列之TDD概念篇 写在前面: 我的TDD实践这几篇文章主要是围绕测试驱动开发所展开的,其中涵盖了一小部分测试理论,更多的则是关注工具的使用及环境的搭建,做到简单实践先行,后理论专精 ...

  5. nginx常用参数设置

    1)隐藏nginx header 版本号 使用curl -I http://www.10.0.3.46 会发现server那里显示版本号 在nginx.conf的http里添加参数server_tok ...

  6. day43 数据库学习egon的博客 索引

    一 介绍 为何要有索引? 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,在生产环境中,我们遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,因此对查询语句 ...

  7. OFIFG fault when using DCO in MSP430

    The OFIFG flag always set in my recent MSP430 smoke device project. In this A sample hardware, there ...

  8. FastAdmin 新年福袋进行中

    FastAdmin 新年福袋进行中 2019新年福袋活动正在进行中 https://www.fastadmin.net/act/20190101/springfestival.html

  9. ML(6)——改进机器学习算法

    现在我们要预测的是未来的房价,假设选择了回归模型,使用的损失函数是: 通过梯度下降或其它方法训练出了模型函数hθ(x),当使用hθ(x)预测新数据时,发现准确率非常低,此时如何处理? 在前面的章节中我 ...

  10. 编写python扩展

    代码: #include <Python.h> static PyObject * spam_system(PyObject *self, PyObject *args) { const ...