`

Java集合: Queue和Deque

    博客分类:
  • Java
 
阅读更多
Queue http://my.oschina.net/kevinair/blog/191434
Deque http://my.oschina.net/kevinair/blog/191630



Queue
java.util.Queue接口是java.util.Collection子接口。
它代表一个有序的对象列表,就像List一样,但是它的使用有略微的区别。
Queue被设计成从末端插入并且从头部删除的形式。

Queue的实现类
java.util.LinkedList
java.util.PriorityQueue

LinkedList是一个非常标准的队列实现。
PriorityQueue保存数据默认是根据内部的自然排序,如果指定了Comparator比较器,

则会使用比较器进行排序。

添加,访问和删除元素
添加元素使用继承自Collection的add()方法。
Queue queue = new LinkedList();
queue.add("1");
queue.add("2");
queue.offer("3");
 
// peek = 1
Object peek = queue.peak();
 
// element = 1
Object element = queue.element();
 
// poll = 1
Object poll = queue.poll();
 
// remove = 2
Object remove = queue.remove();

peek()方法,返回当前queue中的首元素但不删除该元素,如果队列为空则返回null。
element()方法与peek()方法类似,但是当队列为空时抛出异常。
poll()方法,返回并且删除queue中首元素,队列为空返回null。
remove()方法与poll()方法类似,但当队列为空时抛出异常。
add()与offer()方法都将再末尾添加一个元素。
Queue queueA = new LinkedList();
 
queueA.add("element 0");
queueA.add("element 1");
queueA.add("element 2");
 
// 使用 Iterator
Iterator iterator = queueA.iterator();
while(iterator.hasNext(){
  String element = (String) iterator.next();
}
 
// 使用 for-loop
for(Object object : queueA) {
    String element = (String) object;
}






Deque
java.util.Deque接口是java.util.Queue接口的子接口。
它代表的队列包含从队列两端添加和删除元素。
"Deque" 是 "Double Ended Queue"的简称。

Deque的实现类
java.util.ArrayDeque
java.util.LinkedList

LinkedList是一个标准的deque/queue实现。
ArrayDeque内部使用数组保存元素,如果元素数量超过了内部数组的大小,内部将产生一个新的数组,

然后将数据转移过去,用来满足需求,换句话说,ArrayQeque自身有扩容功能。

添加,访问和删除元素
向Deque中添加元素除了add()和offer()方法以外,
还可以调用addLast()插入到末尾,addFirst()插入到头部。
offerFirst()插入到头部,offerLast()插入到末尾。
push()插入到头部,

Deque deque = new LinkedList();
deque.add("element1");         // 在末尾添加元素
deque.addFirst("element2");    // 在头部添加元素
deque.addLast("element3");     // 在末尾添加元素
deque.offerFirst("element4");  // 在头部添加元素
deque.offerLast("element5");   // 在末尾添加元素

出队列的方法除了queue中提到的
peek();  
element();  
poll(); 
remove();


Deque还新增了
getFirst()方法,返回头部元素, 不删除该元素
getLast()方法,返回末尾元素,不删除该元素
peekFirst()方法,返回头部元素,不删除该元素
peekLast()方法,返回末尾元素,不删除该元素
pollFirst()方法,返回头部元素并且删除该元素
pollLast()方法,返回尾部元素并且删除该元素
removeFirst()方法,返回头部元素并且删除该元素
removeLast()方法,返回尾部元素并且删除该元素
removeFirstOccurrence(Object)方法,由头至尾删除第一次出现在列表中的元素
removeLastOccurrence(Object)方法,由尾至头删除第一次出现在列表中的元素
pop()从末尾取出并且删除元素

对元素进行遍历
Deque deque = new LinkedList();
deque.add("element0");
deque.add("element1");
deque.add("element2");
 
// 使用 Iterator
Iterator iterator = dequeA.iterator();
while(iterator.hasNext(){
  String element = (String) iterator.next();
}
 
// 使用 for-loop
for(Object object : dequeA) {
    String element = (String) object;
}
分享到:
评论

相关推荐

    超全Java集合框架讲解.md

    超全Java集合框架讲解 - 超全Java集合框架讲解 - 集合框架总览 - Iterator Iterable ListIterator - Map 和 Collection 接口 - Map 集合体系详解 - HashMap - LinkedHashMap - TreeMap - WeakHashMap - ...

    java内部学习笔记.docx

    4.14 List集合的实现类ArrayList和LinkedList 39 4.15 Iterator迭代器 42 4.16泛型 43 4.17增强型for循环 43 4.18 List高级-数据结构:Queue队列 44 4.19 List高级-数据结构:Deque栈 44 4.20 Set集合的实现类...

    浅谈java集合类以及示例

    聊一聊java 的集合类 概述 Java中集合分为两种类型 第一种:以单个元素存储。其超级父接口是:java.util.Collection; 第二种:以键值对存储...Queue又有Deque、Stack、LinkedList SET ​ 无序不可重复,没有下标。规定S

    廖雪峰 Java 教程.doc

    Java集合简介 使用List 编写equals方法 使用Map 编写equals和hashCode 使用EnumMap 使用TreeMap 使用Properties 使用Set 使用Queue 使用PriorityQueue 使用Deque 使用Stack 使用Iterator 使用...

    Java 基础核心总结 +经典算法大全.rar

    LinkedList Queue接口Deque 接口 AbstractQueue 抽象类LinkedList ArrayDeque PriorityQueue 反射的思想及作用 反射的基本使用 获取类的 Class 对象构造类的实例化对象获取-个类的所有信息 获取类中的变量(Field) ...

    java-basic:java基础测试-java8

    多线程集合IOand so onJava中的集合?1.核心接口:Iterator(迭代器接口)Iterable(可迭代接口) -> Collection(集合接口)-> List(列表,线性表接口) :ArrayList、LinkedList-> Set(元素不重复的集合接口):HashSet、...

    javalruleetcode-leetcode:leetcode刷题集合

    queue,deque,priorty queue) 5.哈希表,映射,集合 6.树,二叉树,二叉搜索树 7.泛型递归、树的递归 ​ 实战题目 (需要重新看,多理解,中序遍历的一个应用) (要考虑没有叶子节点的情况,即是null不是叶子节点) ...

    ao-collections-transformers:Java的双向集合转换

    支持所有主要的集合框架接口(Enumeration,ListIterator,Map,Set,SortedSet,Queue,Deque等)。 占地面积小,设备齐全,没有传递依赖项-不属于大型整体软件包。 动机 小时候,是我绝对的最爱。我和他们一起玩了...

    Java集合框架源码剖析:LinkedList

     LinkedList同时实现了List接口和Deque接口,也是说它既可以看作一个顺序容器,又可以看作一个队列(Queue),同时又可以看作一个栈(Stack)。这样看来,LinkedList简直是个全能。当你需要使用栈或者队列时,可以...

    Java超详细!Java实现数据结构PPT课件

    队列(Queue) 双端队列(Deque) 循环队列 哈希表(HashTable) 树形数据结构 二叉树(BinaryTree)、二叉搜索树(BinarySearchTree、BST) 平衡二叉搜索树(BalancedBinarySearchTree、BBST) AVL树(AVLTree)、...

    C++大学教程,一本适合初学者的入门教材(part1)

    1.9 Java、Internet与万维网 1.10 其他高级语言 1.11 结构化编程 1.12 典型C++环境基础 1.13 C++与本书的一般说明 1.14 C++编程简介 1.15 简单程序:打印一行文本 1.16 简单程序:两个整数相加 1.17 内存的...

    C++大学教程,一本适合初学者的入门教材(part2)

    1.9 Java、Internet与万维网 1.10 其他高级语言 1.11 结构化编程 1.12 典型C++环境基础 1.13 C++与本书的一般说明 1.14 C++编程简介 1.15 简单程序:打印一行文本 1.16 简单程序:两个整数相加 1.17 内存的...

    javaSE代码实例

    第6章 对象和类——Java世界的细胞 77 6.1 面向对象概述 77 6.1.1 面向对象程序设计思想的诞生 77 6.1.2 面向过程与面向对象思想的对比 78 6.1.3 面向对象技术的背景和特点 79 6.2 类的定义与对象的创建...

Global site tag (gtag.js) - Google Analytics