Java语言如何实现队列


这篇文章主要介绍了Java语言如何实现队列,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,免费云主机域名下面让小编带着大家一起了解一下。队列是一种特殊的线性表,只允许在表的前端进行删除操作,在表的后端进行插入操作。队列是一个有序列表,可以用数组或是链表来实现。遵循先入先出的原则。即:先存入队列的数据,要先取出。后存入的要后取出。就相当于我们日常生活中的排队,先来先服务,后来的只能在后面进行排队等待。通过对定义的了解,发现队列很像我们的数组,那我们是不是可以通过数组来模拟队列,下面我们来实践一下。首先先分析一下:队列本身是有序列表,若使用数组的结构来存储队列的数据,则队列数组的声明如下图, 其中 maxSize 是该队 列的最大容量。因为队列的输出、输入是分别从前后端来处理,所以我们需要两个变量 front 及 rear 分别记录队列前后端的下标, front 会随着数据输出而改变,而 rear 则是随着数据输入而改变。当我们将数据存入队列时称为addQueue,addQueue 的处理需要有两个步骤:思路分析当 front == rear 【队列空无数据】,将尾指针往后移:rear + 1若尾指针 rear 小于队列的最大下标 maxSize-1,则将数据存入 rear 所指的数组元素中,否则无法存入数据。 rear == maxSize – 1【表示队列满】无法存入数据。代码在上述的使用中,发现数组使用一次之后就无法使用,没有达到复用的效果,那究竟能不能实现复用呢?当然可以的。我们将这个数组使用算法,改进成一个 环形的队列 取模:%对前面的数组模拟队列的优化,充分利用数组. 因此将数组看做是一个环形的。(通过取模的方式来实现即可)简单分析一下:尾索引的下一个为头索引时表示队列满,即将队列容量空出一个作为约定,这个在做判断队列满的 时候需要注意 (rear + 1) % maxSize == front 【队列满】rear == front 【队列为空】思路如下:front 变量的含义做一个调整: front 就指向队列的第一个元素, 也就是说 arr[front] 就是队列的第一个元素,front 的初始值 = 0rear 变量的含义做一个调整:rear 指向队列的最后一个元素的后一个位置. 因为希望空出一个空间做为约定,rear 的初始值 = 0当队列满时,条件是 (rear + 1) % maxSize == front 【满】对队列为空的条件, rear == front 空当我们这样分析, 队列中有效的数据的个数 (rear - front + maxSize) % maxSize我们就可以在原来的队列上修改得到,一个环形队列LinkedList 类实现了 Queue 接口,因此我们可以把 LinkedList 当成 Queue 来用。poll,remove 区别:remove() 和 poll() 方法都是从队列中删除第一个元素。remove() 的行为与 Collection 接口的版本相似, 但是新的 poll() 方法在用空集合调用时不是抛出异常,只是返回 null。因此新的方法更适合容易出现异常条件的情况。peek,element区别:element() 和 peek() 用于在队列的头部查询元素。与 remove() 方法类似,在队列为空时, element() 抛出一个异常,而 peek() 返回 null。所以推荐大家使用peek() 和 poll()。感谢你能够认真阅读完这篇文章,希望小编分享的“Java语言如何实现队列”这篇文章对大家有帮助,同时也希望大家多多支持百云主机,关注百云主机行业资讯频道,更多相关知识等着你来学习!

相关推荐: C++如何实现班车管理系统

这篇文章主要讲解了“C++如何实现班车管理系统”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++如何实现班车管理系统”吧!设计要求:一交通公司,班车系统的数据包括如下两部分:①班车信息:班交及车号、最大载客数…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 08/19 08:00
下一篇 08/19 08:00

相关推荐