• Java 集合 -- Queue


    使用 Queue

    队列(Queue)是一种经常使用的集合。Queue实际上是实现了一个先进先出(FIFO:First In First Out)的有序表。

    它和List的区别在于,List可以在任意位置添加和删除元素,而Queue只有两个操作:

    • 把元素添加到队列末尾;

    • 从队列头部取出元素。

    在Java的标准库中,队列接口Queue定义了以下几个方法:

    • int size():获取队列长度;

    • boolean add(E)/boolean offer(E):添加元素到队尾;

    • E remove()/E poll():获取队首元素并从队列中删除;

    • E element()/E peek():获取队首元素但并不从队列中删除。

    注意:不要把null添加到队列中,否则poll()方法返回null时,很难确定是取到了null元素还是队列为空。

    接下来我们以poll()和peek()为例来说说“获取并删除”与“获取但不删除”的区别。

    对于Queue来说,每次调用poll(),都会获取队首元素,并且获取到的元素已经从队列中被删除了:

    public class QueueMain {
        public static void main(String[] args){
            Queue<String> q = new LinkedList<>();
            // 添加三个元素
            q.add("apple");
            q.add("pear");
            q.add("banana");
            // 从队列中取出元素
            System.out.println(q.poll()); // apple
            System.out.println(q.poll()); // pear
            System.out.println(q.poll()); // banana
            System.out.println(q.poll()); // null ,队列为空
        }
    }
    

    如果用peek(),因为获取队首元素时,并不会从队列中删除这个元素,所以可以反复获取:

    public class QueueMain {
        public static void main(String[] args){
            Queue<String> q = new LinkedList<>();
            // 添加三个元素
            q.add("apple");
            q.add("pear");
            q.add("banana");
            // 从队列中取出元素
            // 队首永远都是apple,因为peek()不会删除它
            System.out.println(q.peek()); // apple
            System.out.println(q.peek()); // apple
            System.out.println(q.peek()); // apple
        }
    }
    

    从上面的代码中,我们还可以发现,LinkedList既实现了List接口,又实现了Queue接口.

    在使用的时候,如果我们把它当作List,就获取List的引用,如果我们把它当作Queue,就获取Queue的引用:

    // 这是一个List:
    List<String> list = new LinkedList<>();
    // 这是一个Queue:
    Queue<String> queue = new LinkedList<>();
    

    始终按照面向抽象编程的原则编写代码,可以大大提高代码的质量。

    每天学习一点点,每天进步一点点。

  • 相关阅读:
    Asp.Net中Word,Excel等office com组件操作权限的问题 ————转自rainpig2008
    正则表达式摘录
    html5 Canvas画图2:画线条
    彻底理解函数声明与函数表达式优先级问题
    javascript定义变量和优先级的问题
    html5 Canvas画图4:填充和渐变
    讨论下canvas画椭圆的方法
    html5 Canvas画图3:1像素线条模糊问题
    [推荐]实在受不了canvas的语法了!我要让他支持链式语法!
    html5 Canvas画图5:画曲线之arc
  • 原文地址:https://www.cnblogs.com/youcoding/p/13418695.html
Copyright © 2020-2023  润新知