AbstractList.java: Throw messages with IndexOutOfBoundsExceptions.
2000-11-02 Bryce McKinlay <bryce@albatross.co.nz> * java/util/AbstractList.java: Throw messages with IndexOutOfBoundsExceptions. (listIterator()): Call listIterator(0). (size): New field. Initialize to size(). (hasNext): Test position against size, not size(). (remove): Increment knownMod by one instead of resetting it from modCount. (add): Ditto. (SubList.upMod): Removed. (SubList.set): Don't call upMod() or update knownMod. (SubList.add(int,Object)): Increment modCount instead of calling upMod(). (SubList.remove): Ditto. (SubList.addAll): Don't call backingList.size(). Increment size from c.size(). (SubList.iterator): New method. Call listIterator(0). (SubList.listIterator): New method. Restore code to return an anonymous listIterator implementation (with some changes). * java/util/AbstractSequentialList.java: Throw messages with IndexOutOfBoundsExceptions. (addAll): Add a specnote. * java/util/ArrayList.java (removeRange): Get the math right. (addAll): Increment modCount _before_ creating iterator. * java/util/LinkedList.java: Rewritten, mostly. From-SVN: r37203
This commit is contained in:
parent
17e2e7f92d
commit
7177dab5c9
5 changed files with 660 additions and 455 deletions
|
@ -64,6 +64,12 @@ public abstract class AbstractSequentialList extends AbstractList
|
|||
i.add(o);
|
||||
}
|
||||
|
||||
/**
|
||||
* @specnote The spec in the JDK1.3 online docs is wrong. The implementation
|
||||
* should not call next() to skip over new elements as they are
|
||||
* added, because iterator.add() should add new elements BEFORE
|
||||
* the cursor.
|
||||
*/
|
||||
public boolean addAll(int index, Collection c)
|
||||
{
|
||||
boolean modified = false;
|
||||
|
@ -81,7 +87,8 @@ public abstract class AbstractSequentialList extends AbstractList
|
|||
{
|
||||
ListIterator i = listIterator(index);
|
||||
if (index < 0 || index > size())
|
||||
throw new IndexOutOfBoundsException();
|
||||
throw new IndexOutOfBoundsException("Index: " + index + ", Size:" +
|
||||
size());
|
||||
return i.next();
|
||||
}
|
||||
|
||||
|
@ -100,7 +107,8 @@ public abstract class AbstractSequentialList extends AbstractList
|
|||
{
|
||||
ListIterator i = listIterator(index);
|
||||
if (index < 0 || index > size())
|
||||
throw new IndexOutOfBoundsException();
|
||||
throw new IndexOutOfBoundsException("Index: " + index + ", Size:" +
|
||||
size());
|
||||
Object removed = i.next();
|
||||
i.remove();
|
||||
return removed;
|
||||
|
@ -110,7 +118,8 @@ public abstract class AbstractSequentialList extends AbstractList
|
|||
{
|
||||
ListIterator i = listIterator(index);
|
||||
if (index < 0 || index > size())
|
||||
throw new IndexOutOfBoundsException();
|
||||
throw new IndexOutOfBoundsException("Index: " + index + ", Size:" +
|
||||
size());
|
||||
Object old = i.next();
|
||||
i.set(o);
|
||||
return old;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue