+2002-04-06 Mark Wielaard <mark@klomp.org>
+
+ * java/util/ArrayList.java (addAll(int,Collection)): System.arraycopy
+ all of the remaining elements.
+ * java/util/Vector.java (addAll(int,Collection)): Likewise.
+ (removeRange): If toIndex == fromIndex do
+ nothing, if toIndex < fromIndex throw IndexOutIfBoundsException.
+ (removeAll): Always throw NullPointerException when collection is
+ null.
+ (retrainAll): Likewise.
+
2002-04-05 Mark Wielaard <mark@klomp.org>
* java/util/ArrayList.jva (removeRange): If toIndex == fromIndex do
if (csize + size > data.length)
ensureCapacity(size + csize);
int end = index + csize;
- if (index != size)
- System.arraycopy(data, index, data, end, csize);
+ if (size > 0 && index != size)
+ System.arraycopy(data, index, data, end, size - index);
size += csize;
for ( ; index < end; index++)
data[index] = itr.next();
*/
public synchronized boolean removeAll(Collection c)
{
+ if (c == null)
+ throw new NullPointerException();
+
int i;
int j;
for (i = 0; i < elementCount; i++)
*/
public synchronized boolean retainAll(Collection c)
{
+ if (c == null)
+ throw new NullPointerException();
+
int i;
int j;
for (i = 0; i < elementCount; i++)
ensureCapacity(elementCount + csize);
int end = index + csize;
if (elementCount > 0 && index != elementCount)
- System.arraycopy(elementData, index, elementData, end, csize);
+ System.arraycopy(elementData, index,
+ elementData, end, elementCount - index);
elementCount += csize;
for ( ; index < end; index++)
elementData[index] = itr.next();
/**
* Removes a range of elements from this list.
+ * Does nothing when toIndex is equal to fromIndex.
*
* @param fromIndex the index to start deleting from (inclusive)
* @param toIndex the index to delete up to (exclusive)
+ * @throws IndexOutOfBoundsException if fromIndex > toIndex
*/
// This does not need to be synchronized, because it is only called through
// clear() of a sublist, and clear() had already synchronized.
protected void removeRange(int fromIndex, int toIndex)
{
- if (fromIndex != toIndex)
+ int change = toIndex - fromIndex;
+ if (change > 0)
{
modCount++;
System.arraycopy(elementData, toIndex, elementData, fromIndex,
elementCount - toIndex);
int save = elementCount;
- elementCount -= toIndex - fromIndex;
+ elementCount -= change;
Arrays.fill(elementData, elementCount, save, null);
}
+ else if (change < 0)
+ throw new IndexOutOfBoundsException();
}
/**