请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

动态数组capacity为0的情况

波波老师好!
我觉得在2-7节中添加元素时需要对data.length为0的情况加判断并单独处理(我觉得直接capacity++就行了),而不是直接扩容resize(2 * data.length);,因为此时扩容data.length还是0。而且这样的话就不用在删除元素时判断data.length / 2 !=0了,允许数组容量为0的情况产生。
下面是我用C++的测试,针对2-7课程老师Java的写法应该也有这种情况,所以有这个疑问
图片描述

正在回答

2回答

你的实现应该是有问题的。


只要初始化数组的capacity不为零,通过扩容和缩容,capacity不可能为零。

因为在resize中,扩容容量是2*capacity,只要capacity是正数,扩容的容量一定是一个更大的正数;

而对于缩容,缩容的容量是当前的capacity / 2。我们有判断:

if(size == data.length / 4 && data.length / 2 != 0) 所以松茸的容量也不可能是0。


我使用课程的官方代码对你的测试用例进行了测试,没有问题。

https://img1.sycdn.imooc.com//szimg/5d24c35f0001b91d11660480.jpg


在你的环境下使用官方代码进行测试,看看是不是有同样的问题?如果没有问题,请仔细调试比对自己的代码,看哪里有问题。进步就发生在这个过程哦:)


课程课程官方代码传送门:https://github.com/liuyubobobo/Play-with-Data-Structures 

本小节课程官方代码传送门:https://github.com/liuyubobobo/Play-with-Data-Structures/tree/master/02-Arrays/09-Amortized-Time-Complexity/src 


加油!:)

0 回复 有任何疑惑可以回复我~
  • 感谢波波老师!
    我一开始的表述可能有些问题,就是我的测试用例不是针对本小节的,正如老师所说,因为有if(size == data.length / 4 && data.length / 2 != 0) 的判断,缩容时容量不会为0。                                                                              
    
    我是对课程2-7的代码https://github.com/liuyubobobo/Play-with-Data-Structures/tree/master/02-Arrays/07-Dynamic-Array/src
    进行的测试,在2-7代码(103行)remove方法中其实是只有if(size == data.length / 2),所以会出现缩容时容量为0的情况。
    然后我安装了java环境,对2-7测试了一下,发现数组越界了,下面的回复我给下图。
    回复 有任何疑惑可以回复我~ 2019-07-10 10:27:24
  • 非常感谢!
    回复 有任何疑惑可以回复我~ 2019-07-10 11:19:25
提问者 qq_奔跑了丶兄弟_0 2019-07-10 10:39:03

感谢波波老师! 我一开始的表述可能有些问题,就是我的测试用例不是针对本小节的,正如老师所说,因为有if(size == data.length / 4 && data.length / 2 != 0) 的判断,缩容时容量不会为0。 

我是对课程2-7的代码:https://github.com/liuyubobobo/Play-with-Data-Structures/tree/master/02-Arrays/07-Dynamic-Array/src进行的测试,在2-7代码(103行)remove方法中其实是只有if(size == data.length / 2),所以会出现缩容时容量为0的情况。 然后我安装了java环境,对2-7测试了一下,发现数组越界了,下面的回复我给下图。

//img1.sycdn.imooc.com//szimg/5d254d790001a8c809870508.jpg

//img1.sycdn.imooc.com//szimg/5d254d790001472d11990955.jpg

第一次addFirst和第一次removeFirst之后会导致size和capacity都为0。第二次addFirst会导致数组越界。


0 回复 有任何疑惑可以回复我~
  • 感谢提醒,由于我是在这一小节的讲解中添加的这个条件,所以就不该7小节的代码了。课程代码和视频内容严格一一对应:)
    回复 有任何疑惑可以回复我~ 2019-07-10 10:56:01
  • 提问者 qq_奔跑了丶兄弟_0 回复 liuyubobobo #2
    一时激动了!再次感谢波波老师~
    回复 有任何疑惑可以回复我~ 2019-07-10 11:20:25
  • liuyubobobo 回复 提问者 qq_奔跑了丶兄弟_0 #3
    看得出你的基础很好:)加油!:)
    回复 有任何疑惑可以回复我~ 2019-07-10 12:12:36
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信