java中ArrayList增加的长度为什么为50%?

如上,这是为什么呢?... 如上,这是为什么呢? 展开
 我来答
剑走偏锋的话多多
2015-10-15 · 超过36用户采纳过TA的回答
知道小有建树答主
回答量:95
采纳率:0%
帮助的人:68万
展开全部
谁告诉你的啊!!!
API中没有明确的指定增长因子,但是通过阅读源码可知,增长的幅度是在前一次大小的基础上乘以二分之三,再加一。
newSize = (oldSize*3)/2 + 1
404176052
2015-10-15 · TA获得超过229个赞
知道小有建树答主
回答量:251
采纳率:0%
帮助的人:84.1万
展开全部
这是规定,你没必要去刨的!!就是这样设计的!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xuqiuyu081122
推荐于2017-05-22 · 超过23用户采纳过TA的回答
知道答主
回答量:43
采纳率:0%
帮助的人:33.4万
展开全部
java源码:
public void ensureCapacity(int minCapacity) {
modCount++;
int oldCapacity = elementData.length;
if (minCapacity > oldCapacity) {
Object oldData[] = elementData;
int newCapacity = (oldCapacity * 3)/2 + 1;
if (newCapacity < minCapacity)
newCapacity = minCapacity;
// minCapacity is usually close to size, so this is a win:
elementData = Arrays.copyOf(elementData, newCapacity);
}
}

int newCapacity = (oldCapacity * 3)/2 + 1;

假设list初始化默认为10
当第第10个被赋值时list是不会增长长度的,因为此时不需要开辟新的内存
当第11个时将执行会新开辟内存 (if (minCapacity > oldCapacity) 为真 )
因为包含第11个,所以新增后数组长度则为 10 + 10/2 + 1
但是实际上未赋值的为5
也就是说每次开辟新内存时 都需要多开辟1为当前赋值用
这里明显是50%+1.
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式