578 |
|
*/ |
579 |
|
public void clear() { |
580 |
|
modCount++; |
581 |
< |
Arrays.fill(elementData, 0, size, null); |
582 |
< |
size = 0; |
581 |
> |
final Object[] es = elementData; |
582 |
> |
for (int to = size, i = size = 0; i < to; i++) |
583 |
> |
es[i] = null; |
584 |
|
} |
585 |
|
|
586 |
|
/** |
670 |
|
outOfBoundsMsg(fromIndex, toIndex)); |
671 |
|
} |
672 |
|
modCount++; |
673 |
< |
final Object[] es = elementData; |
673 |
< |
final int oldSize = size; |
674 |
< |
System.arraycopy(es, toIndex, es, fromIndex, oldSize - toIndex); |
675 |
< |
Arrays.fill(es, size -= (toIndex - fromIndex), oldSize, null); |
673 |
> |
shiftTailOverGap(elementData, fromIndex, toIndex); |
674 |
|
// checkInvariants(); |
675 |
|
} |
676 |
|
|
677 |
+ |
/** Erases the gap from lo to hi, by sliding down following elements. */ |
678 |
+ |
private void shiftTailOverGap(Object[] es, int lo, int hi) { |
679 |
+ |
System.arraycopy(es, hi, es, lo, size - hi); |
680 |
+ |
for (int to = size, i = (size -= hi - lo); i < to; i++) |
681 |
+ |
es[i] = null; |
682 |
+ |
} |
683 |
+ |
|
684 |
|
/** |
685 |
|
* A version of rangeCheck used by add and addAll. |
686 |
|
*/ |
766 |
|
w += end - r; |
767 |
|
throw ex; |
768 |
|
} finally { |
769 |
< |
final int oldSize = size, deleted = end - w; |
770 |
< |
modCount += deleted; |
766 |
< |
System.arraycopy(es, end, es, w, oldSize - end); |
767 |
< |
Arrays.fill(es, size -= deleted, oldSize, null); |
769 |
> |
modCount += end - w; |
770 |
> |
shiftTailOverGap(es, w, end); |
771 |
|
} |
772 |
|
} |
773 |
|
// checkInvariants(); |
1556 |
|
for (i = beg; i < end; i++) |
1557 |
|
if (isClear(deathRow, i - beg)) |
1558 |
|
es[w++] = es[i]; |
1559 |
< |
final int oldSize = size; |
1557 |
< |
System.arraycopy(es, end, es, w, oldSize - end); |
1558 |
< |
Arrays.fill(es, size -= (end - w), oldSize, null); |
1559 |
> |
shiftTailOverGap(es, w, end); |
1560 |
|
// checkInvariants(); |
1561 |
|
return true; |
1562 |
|
} else { |