今天的面试题 ArrayList的增长方式

xue785920414 2011-11-02 09:17:28
我回答自动增长,他问我具体的增长方式是怎样的,每次增加多少。。。求解,JDK貌似没有
...全文
182 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
gorillaz82 2011-11-02
  • 打赏
  • 举报
回复
看的不是很明白。。。求详解
龙四 2011-11-02
  • 打赏
  • 举报
回复
有人贴出1.6的了
我帖一个1.7的


public void ensureCapacity(int minCapacity) {
if (minCapacity > 0)
ensureCapacityInternal(minCapacity);
}

private void ensureCapacityInternal(int minCapacity) {
modCount++;
// overflow-conscious code
if (minCapacity - elementData.length > 0)
grow(minCapacity);
}


private void grow(int minCapacity) {
// overflow-conscious code
int oldCapacity = elementData.length;
int newCapacity = oldCapacity + (oldCapacity >> 1);
if (newCapacity - minCapacity < 0)
newCapacity = minCapacity;
if (newCapacity - MAX_ARRAY_SIZE > 0)
newCapacity = hugeCapacity(minCapacity);
// minCapacity is usually close to size, so this is a win:
elementData = Arrays.copyOf(elementData, newCapacity);
}
龙四 2011-11-02
  • 打赏
  • 举报
回复
看源码add方法即可

jdk1.6及以前与jdk1.7中的实现方式不太一样
原来缘来 2011-11-02
  • 打赏
  • 举报
回复
/**
* Increases the capacity of this <tt>ArrayList</tt> instance, if
* necessary, to ensure that it can hold at least the number of elements
* specified by the minimum capacity argument.
*
* @param minCapacity the desired minimum capacity
*/
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);
}
}
jinancf 2011-11-02
  • 打赏
  • 举报
回复
为什么要关心它的增长方式?
enendala 2011-11-02
  • 打赏
  • 举报
回复
顶!!!![Quote=引用 1 楼 qqlwq123 的回复:]
自己看源码就知道,是用一个默认为10的Object[]数组进行递增的,当加入的元素大于当前数组的容量就用反射复制值到更大的数组,用新数组代替原来的数组。
[/Quote]
qqlwq123 2011-11-02
  • 打赏
  • 举报
回复
自己看源码就知道,是用一个默认为10的Object[]数组进行递增的,当加入的元素大于当前数组的容量就用反射复制值到更大的数组,用新数组代替原来的数组。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧