public abstract class AbstractList extends AbstractCollection implements List, Rollbackable
As recommended by Collection and List, the subclass should provide at least a no-argument and a Collection constructor. This class is not synchronized.
Collection
,
List
,
AbstractSequentialList
,
AbstractCollection
,
ListIterator
$CHECKPOINT, $RECORD$$CHECKPOINT
Modifier | Constructor and Description |
---|---|
protected |
AbstractList()
The main constructor, for use by subclasses.
|
Modifier and Type | Method and Description |
---|---|
void |
$COMMIT(long timestamp)
Commit changes up to the given timestamp, but not including changes
made at timestamp and afterward.
|
void |
$RESTORE(long timestamp,
boolean trim)
Restore a previous state to all the private fields of this rollbackable
object.
|
void |
add(int index,
java.lang.Object o)
Insert an element into the list at a given position (optional operation).
|
boolean |
add(java.lang.Object o)
Add an element to the end of the list (optional operation).
|
boolean |
addAll(int index,
Collection c)
Insert the contents of a collection into the list at a given position
(optional operation).
|
void |
clear()
Clear the list, such that a subsequent call to isEmpty() would return
true (optional operation).
|
boolean |
equals(java.lang.Object o)
Test whether this list is equal to another object.
|
abstract java.lang.Object |
get(int index)
Returns the elements at the specified position in the list.
|
protected int |
getModCount() |
int |
hashCode()
Obtains a hash code for this list.
|
int |
indexOf(java.lang.Object o)
Obtain the first index at which a given object is to be found in this
list.
|
java.util.Iterator |
iterator()
Obtain an Iterator over this list, whose sequence is the list order.
|
int |
lastIndexOf(java.lang.Object o)
Obtain the last index at which a given object is to be found in this
list.
|
java.util.ListIterator |
listIterator()
Obtain a ListIterator over this list, starting at the beginning.
|
java.util.ListIterator |
listIterator(int index)
Obtain a ListIterator over this list, starting at a given position.
|
java.lang.Object |
remove(int index)
Remove the element at a given position in this list (optional operation).
|
protected void |
removeRange(int fromIndex,
int toIndex)
Remove a subsection of the list.
|
java.lang.Object |
set(int index,
java.lang.Object o)
Replace an element of this list with another object (optional operation).
|
protected void |
setModCount(int modCount) |
List |
subList(int fromIndex,
int toIndex)
Obtain a List view of a subsection of this list, from fromIndex
(inclusive) to toIndex (exclusive).
|
$GET$CHECKPOINT, $SET$CHECKPOINT, addAll, contains, containsAll, isEmpty, remove, removeAll, retainAll, size, toArray, toArray, toString
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
$GET$CHECKPOINT, $SET$CHECKPOINT, addAll, contains, containsAll, isEmpty, remove, removeAll, retainAll, size, toArray, toArray
protected AbstractList()
public abstract java.lang.Object get(int index)
public void add(int index, java.lang.Object o)
add
in interface List
index
- the location to insert the itemo
- the object to insertjava.lang.UnsupportedOperationException
- if this list does not support the
add operationjava.lang.IndexOutOfBoundsException
- if index < 0 || index > size()java.lang.ClassCastException
- if o cannot be added to this list due to its
typejava.lang.IllegalArgumentException
- if o cannot be added to this list for
some other reasonmodCount
public boolean add(java.lang.Object o)
add(size(), o);
, and will fail if that version does.add
in interface Collection
add
in interface List
add
in class AbstractCollection
o
- the object to addjava.lang.UnsupportedOperationException
- if this list does not support the
add operationjava.lang.ClassCastException
- if o cannot be added to this list due to its
typejava.lang.IllegalArgumentException
- if o cannot be added to this list for
some other reasonadd(int, Object)
public boolean addAll(int index, Collection c)
addAll
in interface List
index
- the location to insert the collectionc
- the collection to insertjava.lang.UnsupportedOperationException
- if this list does not support the
addAll operationjava.lang.IndexOutOfBoundsException
- if index < 0 || index > size()java.lang.ClassCastException
- if some element of c cannot be added to this
list due to its typejava.lang.IllegalArgumentException
- if some element of c cannot be added
to this list for some other reasonjava.lang.NullPointerException
- if the specified collection is nulladd(int, Object)
public void clear()
removeRange(0, size())
, so it will fail unless remove
or removeRange is overridden.clear
in interface Collection
clear
in interface List
clear
in class AbstractCollection
java.lang.UnsupportedOperationException
- if this list does not support the
clear operationremove(int)
,
removeRange(int, int)
public boolean equals(java.lang.Object o)
l1.size() == l2.size()
, and for every integer n between 0
and l1.size() - 1
inclusive, l1.get(n) == null ?
l2.get(n) == null : l1.get(n).equals(l2.get(n))
.
This implementation returns true if the object is this, or false if the object is not a List. Otherwise, it iterates over both lists (with iterator()), returning false if two elements compare false or one list is shorter, and true if the iteration completes successfully.
equals
in interface Collection
equals
in interface List
equals
in class java.lang.Object
o
- the object to test for equality with this listObject.equals(Object)
,
hashCode()
public int hashCode()
hashCode = 1; Iterator i = list.iterator(); while (i.hasNext()) { Object obj = i.next(); hashCode = 31 * hashCode + (obj == null ? 0 : obj.hashCode()); }This ensures that the general contract of Object.hashCode() is adhered to.
hashCode
in interface Collection
hashCode
in interface List
hashCode
in class java.lang.Object
Object.hashCode()
,
equals(Object)
public int indexOf(java.lang.Object o)
public java.util.Iterator iterator()
return listIterator(0)
.iterator
in interface Collection
iterator
in interface List
iterator
in class AbstractCollection
modCount
public int lastIndexOf(java.lang.Object o)
lastIndexOf
in interface List
o == null ? get(n) == null
: o.equals(get(n))
, or -1 if there is no such indexpublic java.util.ListIterator listIterator()
listIterator
in interface List
public java.util.ListIterator listIterator(int index)
This implementation uses size(), get(int), set(int, Object), add(int, Object), and remove(int) of the backing list, and does not support remove, set, or add unless the list does. This implementation is fail-fast if you correctly maintain modCount.
listIterator
in interface List
index
- the position, between 0 and size() inclusive, to begin the
iteration fromjava.lang.IndexOutOfBoundsException
- if index < 0 || index > size()modCount
public java.lang.Object remove(int index)
remove
in interface List
index
- the position within the list of the object to removejava.lang.UnsupportedOperationException
- if this list does not support the
remove operationjava.lang.IndexOutOfBoundsException
- if index < 0 || index >= size()modCount
protected void removeRange(int fromIndex, int toIndex)
This implementation first checks for illegal or out of range arguments. It then obtains a ListIterator over the list using listIterator(fromIndex). It then calls next() and remove() on this iterator repeatedly, toIndex - fromIndex times.
fromIndex
- the index, inclusive, to remove from.toIndex
- the index, exclusive, to remove to.java.lang.UnsupportedOperationException
- if the list does
not support removing elements.public java.lang.Object set(int index, java.lang.Object o)
set
in interface List
index
- the position within this list of the element to be replacedo
- the object to replace it withjava.lang.UnsupportedOperationException
- if this list does not support the
set operationjava.lang.IndexOutOfBoundsException
- if index < 0 || index >= size()java.lang.ClassCastException
- if o cannot be added to this list due to its
typejava.lang.IllegalArgumentException
- if o cannot be added to this list for
some other reasonpublic List subList(int fromIndex, int toIndex)
This implementation returns a subclass of AbstractList. It stores, in private fields, the offset and size of the sublist, and the expected modCount of the backing list. If the backing list implements RandomAccess, the sublist will also.
The subclass's set(int, Object)
, get(int)
,
add(int, Object)
, remove(int)
,
addAll(int, Collection)
and
removeRange(int, int)
methods all delegate to the
corresponding methods on the backing abstract list, after
bounds-checking the index and adjusting for the offset. The
addAll(Collection c)
method merely returns addAll(size, c).
The listIterator(int)
method returns a "wrapper object"
over a list iterator on the backing list, which is created with the
corresponding method on the backing list. The iterator()
method merely returns listIterator(), and the size()
method
merely returns the subclass's size field.
All methods first check to see if the actual modCount of the backing list is equal to its expected value, and throw a ConcurrentModificationException if it is not.
subList
in interface List
fromIndex
- the index that the returned list should start from
(inclusive)toIndex
- the index that the returned list should go to (exclusive)java.lang.IndexOutOfBoundsException
- if fromIndex < 0
|| toIndex > size()java.lang.IllegalArgumentException
- if fromIndex > toIndexConcurrentModificationException
,
RandomAccess
protected void setModCount(int modCount)
protected int getModCount()
public void $COMMIT(long timestamp)
Rollbackable
$COMMIT
in interface Rollbackable
$COMMIT
in interface Collection
$COMMIT
in interface List
$COMMIT
in class AbstractCollection
timestamp
- The timestamp.public void $RESTORE(long timestamp, boolean trim)
Rollbackable
$RESTORE
in interface Rollbackable
$RESTORE
in interface Collection
$RESTORE
in interface List
$RESTORE
in class AbstractCollection
timestamp
- The timestamp taken at the time when the previous
state was recorded.trim
- Whether to delete the records used for the rollback.Checkpoint.rollback(long, boolean)