zoukankan      html  css  js  c++  java
  • Queue

    新元素插入到队列的尾部,访问元素操作会返回队列头部的元素,通常队列不允许随机访问队列中的元素

    Queue接口定义的几个方法:

      void add(obj):将指定元素加入队列尾部

      Object element():获取头元素,但不删除

      boolean offer(obj):将指定元素加入队列尾部,当使用有容量限制的队列时,此方法表现的比add要好

      Object peek():获取头元素,但不删除该元素,队列为空则返回null

      Object poll():获取头元素并删除,如果队列为空泽返回null

      Object remove():获取队列头部元素,并删除该元素

    Queue接口有一个PriorityQueue实现类和一个Deque接口

    Deque代表双端队列,可以同时两端添加删除元素,既可以当队列使用,也可以当栈使用。有两个实现类:ArrayDeque,LinkedList

    PriorityQueue类:

      是一个比较标准的队列实现类,说比较标准是因为PriorityQueue保存队列元素的顺序不是按照加入队列的顺序,而是按照队列元素的大小进行重新排序,因此当调用peek或者poll方法取出队列中元素时,不是最先进入的元素,而是最小的元素,这里违反了先进先出规则,大小比较受到PriorityQueue的toString方法影响。不允许插入null

      有两种排序方式:

        自然排序:集合元素必须实现了Comparable接口

        定制排序:创建PriorityQueue队列时,传入一个Comparator对象

      对元素的要求与TreeSet基本一致

    Deque接口:

      代表双端队列,包含下面方法:

        void addFirst(obj):指定元素插入开头

        void addLast(obj):插入结尾

        Iterator descendingIterator():返回双端队列对应迭代器,该迭代器逆向顺序迭代队列中的元素

        Object getFirst():获取但不删除第一个

        Object getLast():获取但不删除最后一个

        boolean offerFirst(obj):插入开头

        boolean offerLast(obj):插入末尾

        Object peekFirst():获取但不删除第一个元素,如果队列为空则null

        Object peekLast():获取但不删除最后一个元素,如果队列为空则null

        Object pollFirst():获取并删除第一个元素,如果队列为空则null

        Object pollLast():获取并删除最后一个元素,如果队列为空则null

        Object pop():(栈方法)pop出栈顶元素,相当于removeFirst

        void push(obj):(栈方法)push到栈顶,相当于addFirst

        Object removeFirst():获取并删除双端队列第一个元素

        boolean removeFirstOccurrence(obj):删除双端队列第一次出现的元素

        Object removeLast():获取并删除双端队列最后一个元素

        boolean removeLastOccurrence(obj):删除该双端队列最后一次出现的元素

    ArrayDeque实现类:

      是Deque的实现类,基于数组实现的双端队列

      创建Deque同样可以指定一个numElements参数,用于指定Object[]数组的长度,不指定则Deque底层数组长度为16

      用栈用ArrayDeque,避免用Stack,也可以当做队列使用:ArrayDeque stack = new ArrayDeque()

      ArrayList和ArrayDeque实现机制基本相同,底层都采用一个动态的,可分配的Object[]数组来存储集合,超出容量则重新分配一个数组

    LinkedList实现类:

      是List接口的实现类,也实现了Deque接口,因此可以当做双端队列使用,可以当做队列使用。也可以当做栈使用

      LinkedList与ArrayList和ArrayDeque实现机制完全不同,后两者以数组形式保存集合中的元素,因此随机访问具有很好的性能,当LinkedList以链表形式,随机访问性能较差,插入删除出色

      Vector也是以数组形式存储,但实现了线程同步,所以各方面性能都差

        

  • 相关阅读:
    ssh
    ssh免密码登陆
    滑雪[dp]
    Help Jimmy[dp]
    动态规划 [子序列问题]
    最佳加法表达式 [dp]
    求排列的逆序数[归并排序]
    输出前m大个数,时间复杂度O(n+mlog(m)) [快排]
    不会递归?五道例题教你如何递归
    函数模板的琐碎笔记
  • 原文地址:https://www.cnblogs.com/zawjdbb/p/7020122.html
Copyright © 2011-2022 走看看