JDK源码(1.7) -- java.util.Deque<E>
java.util.Deque<E> 源码分析(JDK1.7)
---------------------------------------------------------------------------------
java.util.Deque<E>是一个接口,它的定义如下:
public interface Deque<E> extends Queue<E> {
//Modify methods
//Queue methods
//Stack methods
//Collection methods
}
(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>源码如下:(看看下面的源码,定义的很规范,各种操作都有-----> 此时应该想到它的实现类该有多可怜,要实现多少方法呀。~_~)
package java.util; public interface Deque<E> extends Queue<E> {
/*head、tail operation methods*/
void addFirst(E e);
void addLast(E e); boolean offerFirst(E e);
boolean offerLast(E e); E removeFirst();
E removeLast(); E pollFirst();
E pollLast(); E getFirst();
E getLast(); E peekFirst();
E peekLast(); boolean removeFirstOccurrence(Object o);
boolean removeLastOccurrence(Object o); // *** Queue methods ***
boolean add(E e);
boolean offer(E e);
E remove();
E poll();
E element();
E peek(); // *** Stack methods ***
void push(E e);
E pop(); // *** Collection methods ***
boolean remove(Object o);
boolean contains(Object o);
public int size();
Iterator<E> iterator();
Iterator<E> descendingIterator();
}
JDK源码(1.7) -- java.util.Deque<E>的更多相关文章
- JDK源码(1.7) -- java.util.Collection<E>
java.util.Collection<E> 源码分析(JDK1.7) -------------------------------------------------------- ...
- JDK源码学习之 java.util.concurrent.automic包
一.概述 Java从JDK1.5开始提供了java.util.concurrent.atomic包,方便程序员在多线程环境下无锁的进行原子操作.原子变量的底层使用了处理器提供的原子指令,但是不同的CP ...
- JDK源码(1.7) -- java.util.Queue<E>
java.util.Queue<E> 源码分析(JDK1.7) -------------------------------------------------------------- ...
- JDK源码(1.7) -- java.util.Arrays
java.util.Arrays 源码分析 ------------------------------------------------------------------------------ ...
- JDK源码(1.7) -- java.util.AbstractList<E>
java.util.AbstractList<E> 源码分析(JDK1.7) ------------------------------------------------------- ...
- JDK源码(1.7) -- java.util.ListIterator<E>
java.util.ListIterator<E> 源码分析(JDK1.7) ------------------------------------------------------- ...
- JDK源码(1.7) -- java.util.Iterator<E>
java.util.Iterator<E> 源码分析(JDK1.7) ----------------------------------------------------------- ...
- JDK源码(1.7) -- java.util.List<E>
java.util.List<E> 源码分析(JDK1.7) --------------------------------------------------------------- ...
- JDK源码(1.7) -- java.util.AbstractCollection<E>
java.util.AbstractCollection<E> 源码分析(JDK1.7) ------------------------------------------------- ...
随机推荐
- 二进制、十进制、十六进制(python)
int(“x”,base=2/8/16)是把x都转换成十进制 二进制: 1111=1*2的3次方+1*2的2次方+1*2的1次方+1*2的0次方 =8+4+2+1=15 1000=1*2的3次方+0 ...
- 2017 NWERC
2017 NWERC Problem A. Ascending Photo 题目描述:给出一个序列,将其分成\(m\)份(不需要均等),使得将这\(m\)份重新排列后构成的是不下降序列,输出最小的\( ...
- Centos更新配置文件命令
source 命令是 bash shell 的内置命令,从 C Shell 而来.source 命令的另一种写法是点符号,用法和 source 相同,从Bourne Shell而来.source 命令 ...
- vue单选,多选,多选的内容显示在页面可删除
vue做单选只能选一个 <template> <div class="list"> <!-- 多行多列单选 --> <span>只能 ...
- 理解HTTP幂等性(转)
原文链接:http://www.cnblogs.com/weidagang2046/archive/2011/06/04/2063696.html
- 使用情况查询top命令
top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器.下面详细介绍它的使用方法. top - 01:06:48 up 1:22, 1 ...
- HDU 3342 Legal or Not(拓扑排序判断成环)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3342 题目大意:n个点,m条有向边,让你判断是否有环. 解题思路:裸题,用dfs版的拓扑排序直接套用即 ...
- (三)Spring 之AOP 详解
第一节:AOP 简介 AOP 简介:百度百科: 面向切面编程(也叫面向方面编程):Aspect Oriented Programming(AOP),是软件开发中的一个热点,也是Spring框架中的一个 ...
- Django之进阶相关操作
一.QuerySet的特点 1.可切片 使用Python 的切片语法来限制查询集记录的数目 .它等同于SQL 的LIMIT 和OFFSET 子句. 1 >>> Entry.objec ...
- 高屋建瓴之WebMail攻与防
0x01:前言 随着互联网的快速发展,我们的生活与互联网的联系愈加的紧密.各种快捷方便的信息化通信工具渐渐取代了传统的通信方式.微博.QQ.MSN.微信.陌陌, …这样的社交软件和平台已经成为了我们生 ...