• JDK源码(1.7) -- java.util.Deque<E>


    java.util.Deque<E> 源码分析(JDK1.7)

    ---------------------------------------------------------------------------------

    java.util.Deque<E>是一个接口,它的定义如下:

    1 public interface Deque<E> extends Queue<E> {
    2     //Modify methods   
    3     //Queue methods    
    4     //Stack methods
    5     //Collection methods
    6 }

    (1)java.util.Deque<E>是一个线性collection,支持在两端插入和移除元素。(名称deque是"double ended queue" 双端队列)。

    (2)java.util.Deque<E>接口既支持有容量限制的双端队列,也支持没有固定大小限制的双端队列。

    (3)java.util.Deque<E>接口定义在双端队列访问元素的方法,提供插入、移除、检查元素的方法。每种方法都存在两种形式:一种形式在操作失败时抛出异常;另一种形式返回一个特殊值(null或false)。

    下表总结了上述说的插入、移除、检查方法:

      第一个元素(头部) 最后一个元素(尾部)
      抛出异常 特殊值 抛出异常 特殊值
    插入 addFirst(e) offerFirst(e) addLast(e) offerLast(e)
    移除 removeFirst() pollFirst() removeLast() pollLast()
    检查 getFirst() peekFirst() getLast() peekLast()

    (4)java.util.Deque<E>接口扩展了java.util.Queue<E>接口,在将双端队列用作队列时,将得到FIFO行为。将元素添加到双端队列的末尾,从双端队列的开头移除元素。从java.util.Queue<E>接口继承的方法完全等效于java.util.Deque<E>方法,如下表:

    Queue方法 等效Deque方法
    add(e) addLast(e)
    offer(e) offerLast(e)
    remove() removeFirst()
    poll() pollFirst()
    element() getFirst()
    peek() peekFirst()

     (5)双端队列也可以用作LIFO(先进先出)堆栈。(PS:如果要使用堆栈功能,应该优先使用此接口而不是遗留的java.util.Stack类)在将双端队列用作堆栈时,元素被推入双端队列的开头并从双端队列的开头弹出,堆栈方法完全等效于Deque方法,如下表:

    堆栈方法 等效Deque方法
    push(e) addFirst(e)
    pop() removeFirst()
    peek() peekFirst()

    下面来看一副图:

    ----------------------------------------------------------------------------------------

    下面来看看java.util.Deque<E>中具体有哪些方法

    头、尾元素操作 void addFirst(E e) 将指定元素插入此双端队列的开头
    void addLast(E e) 将指定元素插入此双端队列的末尾
    boolean offerFirst(E e) 将指定的元素插入此双端队列的开头
    boolean offerLast(E e) 将指定的元素插入此双端队列的末尾
    E removeFirst() 获取并移除此双端队列第一个元素
    E removeLast() 获取并移除此双端队列的最后一个元素
    E pollFirst() 获取并移除此双端队列的第一个元素;如果此双端队列为空,则返回 null
    E pollLast(); 获取并移除此双端队列的最后一个元素;如果此双端队列为空,则返回 null
    E getFirst() 获取,但不移除此双端队列的第一个元素
    E getLast() 获取,但不移除此双端队列的最后一个元素
    E peekFirst() 获取,但不移除此双端队列的第一个元素
    E peekLast() 获取,但不移除此双端队列的最后一个元素
    boolean removeFirstOccurrence(Object o) 从此双端队列移除第一次出现的指定元素
    boolean removeLastOccurrence(Object o)   从此双端队列移除最后一次出现的指定元素
    队列操作 boolean add(E e) 将指定元素插入此双端队列所表示的队列
    boolean offer(E e) 将指定元素插入此双端队列所表示的队列
    E remove() 获取并移除此双端队列所表示的队列的头部
    E poll() 获取并移除此双端队列所表示的队列的头部
    E element() 获取,但不移除此双端队列所表示的队列的头部
    E peek() 获取,但不移除此双端队列所表示的队列的头部
    堆栈操作 void push(E e) 将一个元素推入此双端队列所表示的堆栈
    E pop() 从此双端队列所表示的堆栈中弹出一个元素
    集合操作 boolean remove(Object o) 从此双端队列中移除第一次出现的指定元素
    boolean contains(Object o) 如果此双端队列包含指定元素,则返回 true
    public int size() 返回此双端队列的元素数
    Iterator<E> iterator() 返回以恰当顺序在此双端队列的元素上进行迭代的迭代器
    Iterator<E> descendingIterator() 返回以逆向顺序在此双端队列的元素上进行迭代的迭代器

    ----------------------------------------------------------------------------------------

    java.util.Deque<E>源码如下:(看看下面的源码,定义的很规范,各种操作都有-----> 此时应该想到它的实现类该有多可怜,要实现多少方法呀。~_~)

     1 package java.util;
     2 
     3 
     4 
     5 public interface Deque<E> extends Queue<E> {
     6     /*head、tail operation methods*/
     7     void addFirst(E e);
     8     void addLast(E e);
     9 
    10     boolean offerFirst(E e);
    11     boolean offerLast(E e);
    12 
    13     E removeFirst();
    14     E removeLast();
    15 
    16     E pollFirst();
    17     E pollLast();
    18 
    19     E getFirst();
    20     E getLast();
    21 
    22     E peekFirst();
    23     E peekLast();
    24 
    25     boolean removeFirstOccurrence(Object o);
    26     boolean removeLastOccurrence(Object o);
    27 
    28     // *** Queue methods ***
    29     boolean add(E e);
    30     boolean offer(E e);
    31     E remove();
    32     E poll();
    33     E element();
    34     E peek();
    35 
    36 
    37     // *** Stack methods ***
    38     void push(E e);
    39     E pop();
    40 
    41 
    42     // *** Collection methods ***
    43     boolean remove(Object o);
    44     boolean contains(Object o);
    45     public int size();
    46     Iterator<E> iterator();
    47     Iterator<E> descendingIterator();
    48 }
  • 相关阅读:
    myeclipse_导入js文件报错
    myeclipse_tomcat在debug模式中报错的信息
    myeclipse_修改@author的值
    项目总结_web文件上传问题
    项目总结_导入JSTL标签库
    在Ubuntu上实现人脸识别登录
    Data Science and Matrix Optimization-课程推荐
    Digix2019华为算法精英挑战赛代码
    Shell script notes
    optim.py-使用tensorflow实现一般优化算法
  • 原文地址:https://www.cnblogs.com/xinhuaxuan/p/6382253.html
Copyright © 2020-2023  润新知