Java源码之ArrayQueue内部是怎么实现的


这篇文章主要讲解了“Java源码之ArrayQueue内部是怎么实现的”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java源码之ArrayQueue内部是怎么实现的”吧!在谈ArrayQueue的内部实现之前我们先来看一个ArrayQueue的使用例子:// 输出结果
[1, 2, 3, 4]
[2, 3, 4]
[3, 4]首先ArrayQueue内部是由循环数组实现的,可能保证增加和删除数据的时间复杂度都是 O ( 1 ) O(1) O(1),不像ArrayList删除数据的时间复杂度为 O ( n ) O(n) O(n)。在ArrayQueue内部有两个整型数据headtail,这两个的作用主要是指向队列的头部和尾部,它的初始状态在内存当中的布局如下图所示:因为是初始状态headtail的值都等于0,指向数组当中第一个数据。现在我们向ArrayQueue内部加入5个数据,那么他的内存布局将如下图所示:现在我们删除4个数据,那么上图经过4次删除操作之后,ArrayQueue内部数据布局如下:在上面的状态下,我们继续加入8个数据,那么布局情况如下:我们知道上图在加入数据的时候不仅将数组后半部分的空间使用完了,而且可以继续使用前半部分没有使用过的空间,也就是说在ArrayQueue内部实现了一个循环使用的过程。构造函数上面的构造函数的代码比较容易理解,主要就是根据用户输入的数组空间长免费云主机域名度去申请数组,不过他具体在申请数组的时候会多申请一个空间。add函数上面的代码也相对比较容易看懂,在上文当中我们已经提到了ArrayQueue可以循环将数据加入到数组当中去,这一点在上面的代码当中也有所体现。remove函数从上面的代码当中可以看出,在remove函数当中我们必须传递参数0,否则会抛出异常。而在这个函数当中我们只会删除当前head下标所在位置的数据,然后将head的值进行循环加1操作。get函数get函数的参数表示得到第i个数据,这个第i个数据并不是数组位置的第i个数据,而是距离head位置为i的位置的数据,了解这一点,上面的代码是很容易理解的。resize函数在resize函数当中首先申请新长度的数组空间,然后将原数组的数据一个一个的拷贝到新的数组当中,注意在这个拷贝的过程当中,重新更新了headtail,而且并不是简单的数组拷贝,因为在之前的操作当中head可能已经不是了0,因此新的拷贝需要我们一个一个的从就数组拿出来,让后放到新数组当中。下图可以很直观的看出这个过程:感谢各位的阅读,以上就是“Java源码之ArrayQueue内部是怎么实现的”的内容了,经过本文的学习后,相信大家对Java源码之ArrayQueue内部是怎么实现的这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是百云主机,小编将为大家推送更多相关知识点的文章,欢迎关注!

相关推荐: 如何用WPF代码实现窗体亚克力效果

WPFWPFWPF .NET40Visual Studio 2022MITWindowAcrylicBlurOpacity1 WindowAcrylicBlur.cs2 AcrylicBlurWindowExample.xaml3 AcrylicBlurWin…

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

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 03/22 19:42
下一篇 03/22 19:42

相关推荐