LinkedList、Stack、Queue、PriorityQueue的总结
1、这几种容器的特点
- 都是按照顺序来存储元素。
- 取元素的时候的不同点:
- LinkedList:按照下标随意取元素
- Stack:后进先出取元素
- Queue:先进先出取元素
- PriorityQueue:按照优先级来取元素
总结:以上四种都是按照顺序来存储元素的,但是就是取元素的时候顺序不一样,这样就把大部分情况都涵盖在里面了,彰显出容器设计的全面性和考虑得很周到
2、标题解惑
为什么要把这四种容器放在一起呢?理由很简单:Stack、Queue、PriorityQueue这三种容器都可以用LinkedList来实现,当然实际上并不是这样的。但是我们可以用这种方式来归纳和总结。下面是jdk文档的几个表,详情请点击这里
First Element (Head) | Last Element (Tail) | |||
Throws exception | Special value | Throws exception | Special value | |
Insert | addFirst(e) |
offerFirst(e) |
addLast(e) |
offerLast(e) |
Remove | removeFirst() |
pollFirst() |
removeLast() |
pollLast() |
Examine | getFirst() |
peekFirst() |
getLast() |
peekLast()
|
Deque不同返回值的表
Queue Method | Equivalent Deque Method |
add(e) |
addLast(e) |
offer(e) |
offerLast(e) |
remove() |
removeFirst() |
poll() |
pollFirst() |
element() |
getFirst() |
peek() |
peekFirst() |
Queue interface和Deque methods的一些等价的方法
Stack Method | Equivalent Deque Method |
push(e) |
addFirst(e) |
pop() |
removeFirst() |
peek() |
peekFirst() |
Stack 和Deque methods的一些等价的方法
从上面的表中我们可以看出,我们可以用Deque的方法来实现Queue和 Stack的功能,而刚刚好的是LinkedList实现了Deque这个接口,
因此LinkedList拥有所有这些方法的实现,LinkedList可以实现Stack、Queue、PriorityQueue。
3、功能
- LinkedList的主要功能
1、拥有所有ArrayList的功能
2、相比ArrayList,就是扩展了对表头和表尾的操作,由第一个表可知。
- Stack、Queue、PriorityQueue的功能
这三种容器并不强调对对象的增、删、改、查、遍历等操作,他们强调是的对象进入容器和对象从容器出来时的一种先后关系。
在这里我们就得出了一个结论:如果你的程序强调对元素的增、删、改、查、遍历等操作就用LinkedList或者ArrayList;
如果是强调对象进入容器和对象从容器出来时的先后关系,那就用Stack、Queue、PriorityQueue。
下面分别归纳这三种容器的功能。
1、Stack(后进先出)
增加
删除
- pop()
查
状态
- empty()
2、Queue(先进先出),在这里它只是一个接口,一般由LinkedList来实例化它
增加
删除
- poll()
查
状态
- empty()
3、PriorityQueue(按优先级从队列中弹出)
- 主要是Comparator这个接口的实现,这个在后面跟equal统一总结
4、LinkedList的优劣点(与ArrayList相比)
优点
- 插入元素效率高
- 删除元素效率高
缺点
- 按下标查找元素效率低
注意:Stack、Queue、PriorityQueue不做性能比较,因为他们的主要点是对象进入容器和对象从容器出来时的先后关系,即使做性能比较也是看他们用什么来实现,比如说用链表还是用数组,这里不做讨论
LinkedList、Stack、Queue、PriorityQueue的总结的更多相关文章
- 数据结构设计 Stack Queue
之前在简书上初步总结过几个有关栈和队列的数据结构设计的题目.http://www.jianshu.com/p/d43f93661631 1.线性数据结构 Array Stack Queue Hash ...
- java三篇博客转载 详解-vector,stack,queue,deque
博客一:转载自http://shmilyaw-hotmail-com.iteye.com/blog/1825171 java stack的详细实现分析 简介 我们最常用的数据结构之一大概就是stack ...
- STL容器适配器 stack, queue
stack是一种后进先出(last in first out)的数据结构.它只有一个出口,如图所示.stack允许新增元素,删除元素,取得最顶端元素.但除了最顶端外,没有其他任何地方可以存储stack ...
- STL容器用法速查表:list,vector,stack,queue,deque,priority_queue,set,map
list vector deque stack queue priority_queue set [unordered_set] map [unordered_map] multimap [uno ...
- Stack&&Queue
特殊的容器:容器适配器 stack queue priority_queue:vector+堆算法---->优先级队列 stack: 1.栈的概念:特殊的线性结构,只允许 ...
- programming review (c++): (1)vector, linked list, stack, queue, map, string, bit manipulation
编程题常用知识点的review. most important: 想好(1)详尽步骤(2)边界特例,再开始写代码. I.vector #include <iostream> //0.头文件 ...
- js in depth: event loop & micro-task, macro-task & stack, queue, heap & thread, process
js in depth: event loop & micro-task, macro-task & stack, queue, heap & thread, process ...
- Java集合类学习-LinkedList, ArrayList, Stack, Queue, Vector
Collection List 在Collection的基础上引入了有序的概念,位置精确:允许相同元素.在列表上迭代通常优于索引遍历.特殊的ListIterator迭代器允许元素插入.替换,双向访问, ...
- java 数据类型:集合接口Collection之队列Queue:PriorityQueue ;Dequeue接口和ArrayDeque实现类:
什么是Queue集合: Queue用于模拟队列这种数据结构,队列通常是"先进先出"(FIFO)的容器.队列的头部保存在队列中存放时间最长的元素,尾部保存存放时间最短的元素. ...
- 31-java中知识总结:list, set, map, stack, queue
import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.Lin ...
随机推荐
- linux下安装redis及其中遇到的问题的解决方法
1.将下载好的压缩包放到/usr/local目录下# tar xzf redis-3.0.2.tar.gz # cd redis-3.0.2 # make 提示错误 make: cc: Command ...
- laravel中redis队列的使用
一.配置文件 首先我们需要在配置文件中配置默认队列驱动为Redis,队列配置文件是config/queue.php: return [ 'default' => env('QUEUE_DRIVE ...
- 详解使用 Tarjan 求 LCA 问题(图解)
LCA问题有多种求法,例如倍增,Tarjan. 本篇博文讲解如何使用Tarjan求LCA. 如果你还不知道什么是LCA,没关系,本文会详细解释. 在本文中,因为我懒为方便理解,使用二叉树进行示范. L ...
- Java编程的逻辑 (9) - 条件执行的本质
本系列文章经补充和完善,已修订整理成书<Java编程的逻辑>,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http:/ ...
- Taints和Tolerations联用,将pod部署到k8s的master节点
一般,k8s的master为了保持高性能,在这个主节点上只运行一些管理必须的POD. 如果我们限于资源,或是一些监控类的pod要部署到master节点呢? 昨天遇到这个问题,按网上通用的方法,未解决, ...
- [转] 对vuex的表象理解(笔记)
一个东西,首先要知道为什么用它,为什么要vuex,官方解释为了解决繁杂事件订阅和广播,那么事件的$dispatch,$on,怎么就复杂了?许多人是不是感觉后者还挺简单的,对的 如果简单小型项目,那么不 ...
- mysql 索引理解
数据的查询,都需要将数据从磁盘中加载到内存中进行运算加载,索引的出现,让原来每个数据块做一次IO减少为区间范围的快速定位,来减少块的io次数. 如上图,是一颗b+树,关于b+树的定义可以参见B+树,这 ...
- 【noip模拟赛1】古韵之刺绣
描述 日暮堂前花蕊娇, 争拈小笔上床描, 绣成安向春园里, 引得黄莺下柳条. ——胡令能<咏绣障> 古时女子四德中有一项——女红.女红的精巧程度对于女子来说是十分重要的.韵哲君十分爱好女红 ...
- ubuntun 18.04 desktop安装jupyter-notebook
在ubuntu18.04要安装jupyter-notebook,当然前提是先安装python,然后按如下步骤安装jupyter-notebook,现在记录如下: 1.sudo apt-get upda ...
- 使用Golang开发一个本地代理
引言 最近需要对接一个接口,人家提供了两种调用方式,第一种是基于IE浏览器的Active,第二种是动态链接库dll.我们公司的产品不支持IE,所以只能通过调用dll来完成了. 之前我已经用Java实现 ...