ArrayDeque_适合小白学习编程的网站

来源:网络时间:2023-11-29 16:04:03

近日ArrayDeque_适合小白学习编程的网站消息关注度非常高,想要进一步了解这方面的最新消息,小编给大家整理出有关这方面的全部内容,希望能够帮助到大家深入了解!

ArrayDeque

在编写cs61b问题时,作者惊讶于为什么会有这种数据结构,于是进行了一番搜索,并发现了ArrayDeque这个有趣的容器。作者将相关信息进行了搬运。

在ArrayDeque类中,实现了Java Queue和Java Deque两个接口。

该容器使用数组来存储数据,并使用两个int值head和tail来表示头部和尾部。需要注意的是,tail并不是指尾部元素的索引,而是指向下一个要添加的元素索引。

ArrayDeque有三个构造函数用于初始化,其中无参构造函数使用了默认容量,而其他两个构造函数通过allocateElements函数计算初始容量。

数组的大小有一个特殊规则,它必须为2的n次方(2^n)。下面我们来看看allocateElements方法的实现。

(1)对于小于2^30的值,通过五次右移和位或操作,可以得到一个2^k - 1的值。最后将这个值+1,得到2^k。通过这个方法,可以将任意初始值转化为2^n的形式。(2)不过缺点是,如果传入的值已经是2^n,经过转化后会变成2^(n+1),所以我们不需要刻意传入2^n的值。(3)如果传入的值大于等于2^30,经过转化后会变成负值,即小于0。此时将初始值设置为2^30,即最大容量只有2^30。

在ArrayDeque中,数组被当做环形来使用。在正常情况下,在末尾添加元素后,tail=tail+1需要进行越界判断。如果越界,将tail设置为0,从索引0开始添加元素。例如,当元素H添加到索引7后,tail值会+1,此时tail=8,但是越界了,所以需要将tail设置为0。

我们来看看(tail + 1) & (elements.length - 1)这个表达式的正确性:

当tail+1

因此,通过(tail + 1) & (elements.length - 1)可以在环形数组中获取正确的索引值,然后判断新的tail是否等于head。如果结果为true,说明数组已经满了,需要进行扩容,即调用doubleCapacity()方法。

该原理相当于addLast方法。

无论是从头部还是尾部添加元素,都会判断tail==head。如果两个索引相遇,说明数组空间已满,需要进行扩容操作。

ArrayDeque支持从头部和尾部移除元素。

前文讲述了如何实现ArrayDeque,但Java标准库已经为我们准备好了,我们只需要按照规则使用即可。

add() - 将指定元素插入ArrayDeque双端队列的末尾

addFirst() - 在ArrayDeque双端队列的开头插入指定元素

addLast() - 在ArrayDeque双端队列的末尾插入指定内容(等效于add())

注意:如果ArrayDeque双端队列已满,则以上所有方法(add()、addFirst()和addLast())都会抛出IllegalStateException异常。

offer() - 将指定元素插入ArrayDeque双端队列的末尾

offerFirst() - 在ArrayDeque双端队列的开头插入指定元素

offerLast() - 将指定元素插入ArrayDeque双端队列的末尾

注意:offer()、offerFirst()和offerLast()返回true表示成功插入元素;否则返回false。如果ArrayDeque双端队列已满,则这些方法返回false。

getFirst() - 返回ArrayDeque双端队列的第一个元素

getLast() - 返回ArrayDeque双端队列的最后一个元素

注:如果ArrayDeque双端队列为空,getFirst()和getLast()会抛出NoSuchElementException异常。

peek() - 返回ArrayDeque双端队列的第一个元素

peekFirst() - 返回ArrayDeque双端队列的第一个元素(等效于peek())

peekLast() - 返回ArrayDeque双端队列的最后一个元素

注:如果ArrayDeque双端队列为空,peek()、peekFirst()和getLast()会抛出NoSuchElementException异常。

remove() - 返回并从ArrayDeque双端队列的第一个元素中删除一个元素

remove(element) - 返回并从ArrayDeque双端队列的头部删除指定元素

removeFirst() - 返回并从ArrayDeque双端队列中删除第一个元素(等效于remove())

removeLast() - 返回并从ArrayDeque双端队列中删除最后一个元素

注意:如果ArrayDeque双端队列为空,remove()、removeFirst()和removeLast()方法会抛出异常。另外,如果找不到元素,remove(element)方法也会抛出异常。

poll() - 返回并删除ArrayDeque双端队列的第一个元素

pollFirst() - 返回并删除ArrayDeque双端队列的第一个元素(等效于poll())

pollLast() - 返回并删除ArrayDeque双端队列的最后一个元素

注意:如果ArrayDeque双端队列为空,如果找不到该元素,poll()、pollFirst()和pollLast()返回null。

删除所有元素的方法如下:

iterator() - 返回一个用于遍历ArrayDeque双端队列的迭代器

descendingIterator() - 返回一个用于以相反顺序遍历ArrayDeque双端队列的迭代器

注:为了使用这些方法,我们必须导入java.util.Iterator包。使用迭代器的方法如下:

element() - 从ArrayDeque双端队列的头部返回一个元素

contains(element) - 在ArrayDeque双端队列中搜索指定元素。如果找到该元素,则返回true,否则返回false。

size() - 返回ArrayDeque双端队列的长度。

toArray() - 将ArrayDeque双端队列转换为数组并返回。

clone() - 创建ArrayDeque双端队列的副本并返回它。

push() - 在堆栈顶部添加一个元素

peek() - 从堆栈顶部返回一个元素

pop() - 返回并从堆栈顶部删除元素

适合小白学习编程的网站

1. CSDN是一个非常有用的网站,它为IT从业者提供解决实际编程问题的方法。在这个网站上,从菜鸟到大牛的程序员们可以互相帮助和共享经验。在CSDN上面,人们可以记录自己遇到的编程问题,并以博客的方式分享给其他人。当你遇到类似的问题时,你可以在CSDN上搜索到高正确率的解决方法。作者和他的舍友们经常在CSDN上查到各种解决方法,觉得非常好用。

2. RUNOOB是一个对于IT小白特别有帮助的网站。在这个网站上,你可以找到几乎所有编程语言的通俗易懂的教程,并且支持在线编辑。包括JAVA,C,C++,PHP,PYTHON等热门编程语言教程。网站界面简洁,没有广告,非常适合新手入门。正如它的名字“RUNOOB菜鸟教程”所说,它专门为菜鸟量身定制。如果你对java感兴趣,可以加入他们的java技术学习群,里面免费提供整套系统的java教程!

3. W3SCHOOL是一个面向网站开发者的教育平台。在这里,你可以找到所有网站建设所需要的教程。从基础的HTML到进阶的XML、SQL、数据库、多媒体和WAP,这里提供的资源全部免费!对于学编程的IT小白来说,这三个网站非常有用!

以上就是多特软件站小编给大家带来的ArrayDeque_适合小白学习编程的网站全部内容了,希望对小伙伴们有所帮助。

更多全新内容敬请关注多特软件站(www.y866.cn)!

文章内容来源于网络,不代表本站立场,若侵犯到您的权益,可联系我们删除。(本站为非盈利性质网站) 联系邮箱:rjfawu@163.com