zoukankan      html  css  js  c++  java
  • 队列

      队列的特点是先进先出

      单项队列只能在队尾添加元素,从队头删除元素。

      双向队列的队头和队尾都支持元素的入队和出队。

    public interface Deque<E> extends Queue<E>{
      void addFirst(E e);
      void addLast(E e);
    
      E removeFirst();
      E removeLast();
    }

      一般情况下,Queue的实现类不允许添加null元素。因为poll(),peek()方法在异常时会返回null

    public interface Queue<E> extends Collection<E>{
      boolean add(E e);  //Exception
      boolean offer(E e); // return special value
      E remove();//Exception
      E poll();// return special value
      E element();//Exception
      E peek();// return special value
    }

    PriorityQueue  

      PriorityQueue又叫做优先级队列,保存队列元素的顺序不是按照加入队列的顺序,而是按照队列元素的大小进行排序的。不允许null元素。PriorityQueue使用了堆数据结构。底层使用数组保存数据。PriorityQueue元素可以使用默认的自然排序或提供Comparator在队列实例化时指定的排序方式进行排序。当PriorityQueue中没有指定Comparator时,加入的元素必须事先了Comparable接口,否则会导致ClassCastException。

       PriorityQueue调用默认的构造方法时,使用默认的初识容量(DEFAULT_IITIAL_CAPACITY = 11)创建一个PriorityQueue,并根据其自然顺序来排序元素

      PriorityQueue不是线程安全的。PriorityBlockingQueue是线程安全的

      不允许插入null元素

      PriorityQueue实现插入方法(offer,poll,remove()和add方法)的时间复杂度是O(log(n)),实现remove(Object)和contains(Object)方法的时间复杂度是O(n),实现检索方法(peek,element和size)的时间复杂度是O(1),在不需要删除元素时,应使用peek的方式遍历每个元素。

      iterator()职工提供的迭代器并不保证以有序的方式遍历PriorityQueue中的元素

    ArrayDeque

      ArrayDeque使用数组实现的Deque,底层是数组,默认长度是16。思路是引入两个游标,head和tail,若向队列里插入一个元素,就把tail向后移动。若从队列中删除一个元素,就把head向后移动。若tail已经指向了数组的最后一位,则把head重新指向数组的头就可以了。即用一个环形数组来实现队列。ArrayDeque也是县城不安全的。

      ArrayBlockingQueue在构造时需要指定容量,并可以选择是否需要公平性,若公平参数被设置为true,等待时间最长的线程会优先得到处理。

      DelayQueue是一个存放Delayed元素的无阻塞队列,只有延迟期满时才能从国内中提取元素。该队列的头部是延迟期满后保存时间最长的Delayed元素。若延迟起都没有满,则队列没有头部,并且poll方法返回null。当一个元素的getDelay()方法返回一个小于或等于零的值,则出现期满,poll就可以一出这个元素了。此队列不允许使用null元素。放入DelayQueue的元素还要实现compareTo方法,DelayQueue使用这个来为元素排序。

      

  • 相关阅读:
    高精度计算
    高精度除以低精度
    P1258 小车问题
    POJ 2352 stars (树状数组入门经典!!!)
    HDU 3635 Dragon Balls(超级经典的带权并查集!!!新手入门)
    HDU 3938 Portal (离线并查集,此题思路很强!!!,得到所谓的距离很巧妙)
    POJ 1703 Find them, Catch them(确定元素归属集合的并查集)
    HDU Virtual Friends(超级经典的带权并查集)
    HDU 3047 Zjnu Stadium(带权并查集,难想到)
    HDU 3038 How Many Answers Are Wrong(带权并查集,真的很难想到是个并查集!!!)
  • 原文地址:https://www.cnblogs.com/forerver-elf/p/9243592.html
Copyright © 2011-2022 走看看