慕妹7164721

1.2.3 数组初始化,被加入一个值后,如果我使用 addAll 方法,一下子加入 15 个值,实际上addAll方法底层是调用add方法,所以当调用到第16个时候,element.length=15,所以扩容肯定4 int newCapacity = oldCapacity + (oldCapacity >> 1); newCapacity肯定是22啊,怎么会是16?

2020-02-01
5
1
回复 5
weixin_慕娘7519166 回复 慕妹7164721

ArrayList那节add源码又说 扩容后会与期望值比较 如果小于期望值 扩容的大小直接等于期望值 15 < 16 所以扩容直接为16

2020-02-09
RobotHost 回复 慕妹7164721

private void grow(int minCapacity) { // overflow-conscious code int oldCapacity = elementData.length; int newCapacity = oldCapacity + (oldCapacity >> 1); if (newCapacity - minCapacity < 0) newCapacity = minCapacity; ......

2020-02-17
慕的地5816577 回复 慕妹7164721

我明白你的意思,你是觉得是一个一个add进去的,当要添加第16个元素时,数组大小是15,然后进行扩容。作者的意思好像是一下子全添加进去。

2020-09-27
Jonathan__ 回复 慕妹7164721

你自己调试一下这段代码就知道了啊

2021-03-23
Jonathan__

ArrayList list = new ArrayList<>(); list.add(1); List asList = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3, 4, 5); list.addAll(asList); list.add(111);

2021-03-23
没有更多内容
取消 回复 发送