本帖最后由 花心々小土豆 于 2013-6-9 21:28 编辑
下午我回复了一个帖子,其中有一点关于ArrayList怎么自动扩充容量的,以前听毕老师视频的时候说是超过初始值10以后按百分之五十增加(视频第14天06,10分40秒左右讲过,刚特意重新听了一下)。有一哥们说我说错了,还附上源码 int newCapacity = (oldCapacity * 3)/2 + 1; 刚开始我以为我说错了,当然我以前只是听毕老师讲的时候留下的印象,听了毕老师视频以后有看了我jdk中的源码,源码对应的语句是int newCapacity = oldCapacity + (oldCapacity >> 1); 我用的是jdk1.7.0,我又在网上下了一个旧版的jdk源码看了下和上面那哥们是一样的。
版本不同而已。再说到底按照原来的多少倍扩充它不是太重要,我们只要知道ArrayList中元素超出自身容量的时候会扩充就行了,从不同版本中可以看出,Java设计者也不希望我们为此问题纠结。当然,如果我们感觉不爽,自己内存又充足,复写它让它按8倍扩充也行。其实1.5倍和1.6倍没啥太大区别,哪个都有可能在内存中产生碎片的(内存浪费)。看到1.7版中用到了移位,可能只是为了让做这步运算的时候效率高点罢了。
主要是那哥们说我错的时候语气有点让我不爽,更让我惊讶的是,有版主在他给我回复说我错的时候加了技术分,理由是“赞一个”。这都什么心态啊!
我们应该认真对待每个问题,谁回答问题的时候没经过思考,就算回答的确实不对,好好说嘛
记得技术审核规则里有写到,有好的帖子可以给2或3分,版主们应该考虑考虑用下
|
|