160 |
|
int cap = r.length; |
161 |
|
if (i < cap) |
162 |
|
r[i++] = (T)it.next(); |
163 |
< |
else if (cap < Integer.MAX_VALUE) { // expand |
164 |
< |
int newCap = (cap * 3) / 2 + 1; |
165 |
< |
if (newCap <= cap) // integer overflow |
163 |
> |
else { |
164 |
> |
int newCap = ((cap / 2) + 1) * 3; |
165 |
> |
if (newCap <= cap) { // integer overflow |
166 |
> |
if (cap == Integer.MAX_VALUE) |
167 |
> |
throw new OutOfMemoryError |
168 |
> |
("Required array size too large"); |
169 |
|
newCap = Integer.MAX_VALUE; |
170 |
+ |
} |
171 |
|
r = Arrays.copyOf(r, newCap); |
172 |
< |
} else // can't expand |
173 |
< |
throw new OutOfMemoryError("Required array size too large"); |
170 |
< |
} |
172 |
> |
} |
173 |
> |
} |
174 |
|
// trim if overallocated |
175 |
|
return i == r.length ? r : Arrays.copyOf(r, i); |
176 |
|
} |