|
||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectorg.ozoneDB.OzoneObject
org.ozoneDB.collections.AbstractOzoneCollection
org.ozoneDB.collections.BaseListImpl
A basic implementation of most of the methods in the List interface to make it easier to create a List based on a random-access data structure. If the list is sequential (such as a linked list), use AbstractSequentialList. To create an unmodifiable list, it is only necessary to override the size() and get(int) methods (this contrasts with all other abstract collection classes which require an iterator to be provided). To make the list modifiable, the set(int, Object) method should also be overridden, and to make the list resizable, the add(int, Object) and remove(int) methods should be overridden too. Other methods should be overridden if the backing data structure allows for a more efficient implementation. The precise implementation used by AbstractList is documented, so that subclasses can tell which methods could be implemented more efficiently.
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
,
Serialized FormField Summary | |
protected int |
modCount
A count of the number of structural modifications that have been made to the list (that is, insertions and removals). |
Constructor Summary | |
protected |
BaseListImpl()
The main constructor, for use by subclasses. |
Method Summary | |
void |
_org_ozoneDB_removeRange(int fromIndex,
int toIndex)
Remove a subsection of the list. |
void |
add(int index,
java.lang.Object o)
|
boolean |
add(java.lang.Object o)
Add an element to the end of the list (optional operation). |
boolean |
addAll(int index,
java.util.Collection c)
|
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. |
java.util.List |
getClientList()
Returns a List that contains the same entries as this
persistent one; it is (by nature of the client-server enviromnent) always
a 'deep' copy of this OzoneList . |
int |
hashCode()
Obtains a hash code for this list. |
int |
indexOf(java.lang.Object o)
|
protected java.util.Iterator |
internalIterator()
|
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). |
java.lang.Object |
set(int index,
java.lang.Object o)
Replace an element of this list with another object (optional operation). |
java.util.List |
subList(int fromIndex,
int toIndex)
Obtain a List view of a subsection of this list, from fromIndex (inclusive) to toIndex (exclusive). |
Methods inherited from class org.ozoneDB.collections.AbstractOzoneCollection |
addAll, contains, containsAll, getClientCollection, isEmpty, remove, removeAll, retainAll, size, toArray, toArray, toString |
Methods inherited from class org.ozoneDB.OzoneObject |
container, database, deleteRecursive, getHandle, getObjectID, handle, onActivate, onCreate, onDelete, onPassivate, requireWriteLocking, self, setContainer, toXML |
Methods inherited from class java.lang.Object |
clone, finalize, getClass, notify, notifyAll, wait, wait, wait |
Methods inherited from interface org.ozoneDB.collections.BaseList |
_org_ozoneDB_emptyClientCollection, _org_ozoneDB_getModCount |
Methods inherited from interface org.ozoneDB.collections.OzoneCollection |
_org_ozoneDB_internalIterator, addAll, getClientCollection, remove, removeAll, retainAll |
Methods inherited from interface java.util.Collection |
contains, containsAll, isEmpty, size, toArray, toArray |
Methods inherited from interface org.ozoneDB.OzoneCompatibleOrProxy |
getObjectID |
Methods inherited from interface java.util.List |
addAll, contains, containsAll, get, isEmpty, remove, removeAll, retainAll, size, toArray, toArray |
Field Detail |
protected int modCount
ConcurrentModificationException
in response
to the next operation on the iterator. This fail-fast behavior
saves the user from many subtle bugs otherwise possible from concurrent
modification during iteration.
To make lists fail-fast, increment this field by just 1 in the
add(int, Object)
and remove(int)
methods.
Otherwise, this field may be ignored.
Constructor Detail |
protected BaseListImpl()
Method Detail |
public void add(int index, java.lang.Object o)
add
in interface OzoneList
public boolean add(java.lang.Object o)
add(size(), o);
, and will fail if that version does.
add
in interface OzoneCollection
add
in class AbstractOzoneCollection
o
- the object to add
java.lang.UnsupportedOperationException
- if this list does not support the
add operation
java.lang.ClassCastException
- if o cannot be added to this list due to its
type
java.lang.IllegalArgumentException
- if o cannot be added to this list for
some other reasonadd(int, Object)
public boolean addAll(int index, java.util.Collection c)
addAll
in interface OzoneList
public void clear()
removeRange(0, size())
, so it will fail unless remove
or removeRange is overridden.
clear
in interface OzoneCollection
clear
in class AbstractOzoneCollection
java.lang.UnsupportedOperationException
- if this list does not support the
clear operationremove(int)
,
_org_ozoneDB_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 java.util.Collection
o
- the object to test for equality with this list
Object.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 java.util.Collection
Object.hashCode()
,
equals(Object)
public int indexOf(java.lang.Object o)
indexOf
in interface java.util.List
public java.util.Iterator iterator()
return listIterator(0)
.
iterator
in interface java.util.Collection
iterator
in class AbstractOzoneCollection
modCount
public int lastIndexOf(java.lang.Object o)
lastIndexOf
in interface java.util.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 java.util.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 java.util.List
index
- the position, between 0 and size() inclusive, to begin the
iteration from
java.lang.IndexOutOfBoundsException
- if index < 0 || index > size()modCount
public java.lang.Object remove(int index)
remove
in interface OzoneList
index
- the position within the list of the object to remove
java.lang.UnsupportedOperationException
- if this list does not support the
remove operation
java.lang.IndexOutOfBoundsException
- if index < 0 || index >= size()modCount
public void _org_ozoneDB_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.
_org_ozoneDB_removeRange
in interface BaseList
fromIndex
- the index, inclusive, to remove from.toIndex
- the index, exclusive, to remove to.public java.lang.Object set(int index, java.lang.Object o)
set
in interface OzoneList
index
- the position within this list of the element to be replacedo
- the object to replace it with
java.lang.UnsupportedOperationException
- if this list does not support the
set operation
java.lang.IndexOutOfBoundsException
- if index < 0 || index >= size()
java.lang.ClassCastException
- if o cannot be added to this list due to its
type
java.lang.IllegalArgumentException
- if o cannot be added to this list for
some other reasonpublic java.util.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 java.util.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
public java.util.List getClientList()
OzoneList
Returns a List
that contains the same entries as this
persistent one; it is (by nature of the client-server enviromnent) always
a 'deep' copy of this OzoneList
. I.e. the contents of
this OzoneList
instance are always copied to the client
by use of serialization.
Note that the difference of calling iterator()
compared to getClientList().iterator()
is that in
the first case you go through the real collection on the server and in
the second case you go through a local copy on the client side.
getClientList
in interface OzoneList
protected java.util.Iterator internalIterator()
|
||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |