SC-202004030939_20200907-潘旭
日志
问题:
问题内容:capacity : 2 , size : 2 // size>1.5 ,为什么没扩容?
// 给定容量为2,默认加载因子0.75
public void grow() {
int oldCapacity = elements.length;
if (counter > oldCapacity * loadFactor) {
int newCapacity = oldCapacity + (oldCapacity >> 1); //(oldCapacity >> 1)是oldCapacity的一半
Object[] array = new Object[newCapacity];
Arrays.fill(array, PRESENT);
System.arraycopy(elements, 0, array, 0, counter);
elements = array;
}
}
public void add(Object element) {
grow();
elements[counter] = element;
counter++;
}
public int capacity() {
return elements.length;
}
public int size() {
return counter;
}
// counter(size) > oldCapacity(2) * loadFactor(0.75)=1.5
//结果
capacity : 2 , size : 1
capacity : 2 , size : 2 // size>1.5
capacity : 3 , size : 3
capacity : 4 , size : 4
capacity : 6 , size : 5
解决问题:
public void add(Object element) {
grow(); //counter从0开始
elements[counter] = element;//这里传入数组元素
counter++;//counter自增
}
// 先开始的扩容,后增加的,而且counter是从开始的。
// 进入grow()方法时counter= 1, counter(1) < oldCapacity(2) * loadFactor(0.75)=1.5
// 输出的counter时自增后的。counter = 2。
吐槽:
没有吐槽的!
点赞