jjzjj

ensureCapacity

全部标签

java - ArrayList 中 ensureCapacity 方法中使用的逻辑

我正在浏览ArrayList的源代码。我遇到了ensureCapacity()方法,它增加了内部使用的数据数组的容量。其中,数据数组的新容量根据逻辑intnewCapacity=(oldCapacity*3)/2+1;增加,其中旧容量是当前数据数组的大小。选择(oldCapacity*3)/2+1作为新的数组大小有什么特别的原因吗?如果是的话是什么?/***IncreasesthecapacityofthisArrayListinstance,if*necessary,toensurethatitcanholdatleastthenumberofelements*specifiedby

Java StringBuilder(StringBuffer) 的 ensureCapacity() : Why is it doubled and incremented by 2?

我已经对此进行了搜索,但我找不到为什么StringBuilder的ensureCapacity()方法不会通过仅加倍加二来延长旧容量。所以,当默认容量16已满时,除非整个字符串长度不超过34,否则下一个加长值将是34。为什么不应该是32?我最好的猜测是考虑一个空字符'\u0000',但我不确定。谁能告诉我为什么? 最佳答案 我相信这与一种简单但有点愚蠢的方法有关,以确保非常小的字符串的角盒。例如,如果我有字符串""我只是把它翻倍,我没有足够的大小来存放其他任何东西。如果我将它加倍并添加少量恒定的空格,我可以确保我的新值大于旧值。那为

Java StringBuilder(StringBuffer) 的 ensureCapacity() : Why is it doubled and incremented by 2?

我已经对此进行了搜索,但我找不到为什么StringBuilder的ensureCapacity()方法不会通过仅加倍加二来延长旧容量。所以,当默认容量16已满时,除非整个字符串长度不超过34,否则下一个加长值将是34。为什么不应该是32?我最好的猜测是考虑一个空字符'\u0000',但我不确定。谁能告诉我为什么? 最佳答案 我相信这与一种简单但有点愚蠢的方法有关,以确保非常小的字符串的角盒。例如,如果我有字符串""我只是把它翻倍,我没有足够的大小来存放其他任何东西。如果我将它加倍并添加少量恒定的空格,我可以确保我的新值大于旧值。那为

java arraylist ensureCapacity 不工作

要么我做错了,要么我不明白这个方法是如何工作的。ArrayLista=newArrayList();a.ensureCapacity(200);a.add(190,"test");System.out.println(a.get(190).toString());我原以为ensureCapacity会让我插入一个索引达到该值的记录。有没有其他方法可以做到这一点?我在第三行收到IndexOutOfBounds错误。 最佳答案 不,ensureCapacity不会改变ArrayList的逻辑大小-它会改变容量,这是列表在下一次需要复制值