提问:关于abstractConllection中finishToArray 的问题
abstractConllection中finishToArray 的实现有些问题;
private static <T> T[] finishToArray(T[] r, Iterator<?> it) {
int i = r.length;-----------------这里是获取数组r的大小
while (it.hasNext()) {
int cap = r.length; ------------------------这里为什么还要在获取一遍
if (i == cap) { ------------------------------什么情况下他们不相等
int newCap = cap + (cap >> 1) + 1;
// overflow-conscious code
if (newCap - MAX_ARRAY_SIZE > 0)
newCap = hugeCapacity(cap + 1);
r = Arrays.copyOf(r, newCap);
}
r[i++] = (T)it.next();
}
// trim if overallocated
return (i == r.length) ? r : Arrays.copyOf(r, i); ------------这里 i和r.length 什么时候会相等
}