前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java面试之栈和队列

Java面试之栈和队列

原创
作者头像
黄桂期
发布2018-07-25 23:14:21
6220
发布2018-07-25 23:14:21
举报
文章被收录于专栏:土豆专栏

最近正在整理一些面试的资料,希望大佬们多多指点

队列和栈是什么,列出它们的区别

队列(Queue):是限定只能在表的一端进行插入和在另一端进行删除操作的线性表

栈(Stack):是限定只能在表的一端进行插入和删除操作的线性表

区别如下:

规则不同:

队列:先进先出

栈:后进先出

对插入和删除操作的限定不同:

队列:只能在表的一端进行插入,并在表得到另一端进行删除

栈:只能在表的一段进行插入和删除

遍历数据速度不同:

队列:基于地址指针进行遍历,而且可以从头部或者尾部进行遍历,但是不能同时遍历,无需开辟空间,因为在遍历的过程中不影响数据结构,所以遍历速度快

栈:只能从顶部读取数据,也就是说先进入栈底的,需要遍历整个栈才能取出来,而且在遍历数据的同时需要为数据开辟临时空间,保持数据在遍历前的一致性

栈

BlockingQueue是什么

BlockingQueue队列和平常队列一样都可以用来作为存储数据的容器,但有时候在线程当中涉及到数据存储的时候就会出现问题,而BlockingQueue是空的话,如果一个线程要从BlockingQueue里面读取数据的话,该线程将会被阻断,并进入等待状态,直到BlockingQueue里面有数据存入了就会唤醒线程进行数据的去除。若BlockingQueue是满的,如果一个线程要将数据存入BlockingQueue,该线程将会被阻断,并进入等待状态,直到BlockingQueue里面的数据被取出有空间后,线程被唤醒后将数据存入

BlockingQueue定义的常用方法详解:

  • add(anObject):把anObject加到BlockingQueue里,即如果BlockingQueue可以容纳,则返回true,否则报异常
  • offer(anObject):表示如果可能的话,将anObject加到BlockingQueue里,即如果BlockingQueue可以容纳,则返回true,否则返回false.
  • put(anObject):把anObject加到BlockingQueue里,如果BlockQueue没有空间,则调用此方法的线程被阻断直到BlockingQueue里面有空间再继续.
  • poll(time):取走BlockingQueue里排在首位的对象,若不能立即取出,则可以等time参数规定的时间,取不到时返回null
  • take():取走BlockingQueue里排在首位的对象,若BlockingQueue为空,阻断进入等待状态直到Blocking有新的对象被加入为止

BlockingQueue有四个具体的实现类,根据不同需求,选择不同的实现类

  • ArrayBlockingQueue:规定大小的BlockingQueue,其构造函数必须带一个int参数来指明其大小.其所含的对象是以FIFO(先入先出)顺序排序的.
  • LinkedBlockingQueue:大小不定的BlockingQueue,若其构造函数带一个规定大小的参数,生成的 BlockingQueue有大小限制,若不带大小参数,所生成的BlockingQueue的大小由Integer.MAX_VALUE来决定.其所含 的对象是以FIFO(先入先出)顺序排序
  • PriorityBlockingQueue:类似于LinkedBlockQueue,但其所含对象的排序不是FIFO,而是依据对象的自然排序顺序或者是构造函数的Comparator决定的顺序.
  • SynchronousQueue:特殊的BlockingQueue,对其的操作必须是放和取交替完成的.
  • LinkedBlockingQueue和ArrayBlockingQueue比较起来,它们背后所用的数据结构不一样,导致 LinkedBlockingQueue的数据吞吐量要大于ArrayBlockingQueue,但在线程数量很大时其性能的可预见性低于 ArrayBlockingQueue.

备注:问题整理来源于唐尤华

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 队列和栈是什么,列出它们的区别
  • BlockingQueue是什么
  • BlockingQueue定义的常用方法详解:
  • BlockingQueue有四个具体的实现类,根据不同需求,选择不同的实现类
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档