org.ozoneDB.collections
Class BaseSequentialListImpl

java.lang.Object
  extended byorg.ozoneDB.collections.AbstractOzoneList
      extended byorg.ozoneDB.collections.BaseSequentialListImpl
All Implemented Interfaces:
java.util.Collection, java.util.List, OzoneCollection, org.ozoneDB.OzoneCompatibleOrProxy, OzoneList, org.ozoneDB.OzoneRemote

public abstract class BaseSequentialListImpl
extends AbstractOzoneList

Abstract superclass to make it easier to implement the List interface when backed by a sequential-access store, such as a linked list. For random access data, use AbstractList. This class implements the random access methods (get, set, add, and remove) atop the list iterator, opposite of AbstractList's approach of implementing the iterator atop random access.

To implement a list, you need an implementation for size() and listIterator. With just hasNext, next, hasPrevious, previous, nextIndex, and previousIndex, you have an unmodifiable list. For a modifiable one, add set, and for a variable-size list, add add and remove.

The programmer should provide a no-argument constructor, and one that accepts another Collection, as recommended by the Collection interface. Unfortunately, there is no way to enforce this in Java.

Since:
1.2
Author:
Original author unknown, Bryce McKinlay, Eric Blake
See Also:
Collection, List, AbstractList, AbstractCollection, ListIterator, LinkedList

Constructor Summary
protected BaseSequentialListImpl()
          The main constructor, for use by subclasses.
 
Method Summary
 void add(int index, java.lang.Object o)
          Insert an element into the list at a given position (optional operation).
 boolean addAll(int index, java.util.Collection c)
          Insert the contents of a collection into the list at a given position (optional operation).
 java.lang.Object get(int index)
          Get the element at a given index in this list.
 java.util.Iterator iterator()
          Obtain an Iterator over this list, whose sequence is the list order.
abstract  java.util.ListIterator listIterator(int index)
          Returns a ListIterator over the list, starting from position index.
 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).
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface org.ozoneDB.collections.OzoneList
getClientList
 
Methods inherited from interface org.ozoneDB.collections.OzoneCollection
_org_ozoneDB_internalIterator, add, addAll, clear, getClientCollection, remove, removeAll, retainAll
 
Methods inherited from interface java.util.Collection
contains, containsAll, equals, hashCode, isEmpty, size, toArray, toArray
 
Methods inherited from interface org.ozoneDB.OzoneCompatibleOrProxy
getObjectID
 
Methods inherited from interface java.util.List
add, addAll, clear, contains, containsAll, equals, hashCode, indexOf, isEmpty, lastIndexOf, listIterator, remove, removeAll, retainAll, size, subList, toArray, toArray
 

Constructor Detail

BaseSequentialListImpl

protected BaseSequentialListImpl()
The main constructor, for use by subclasses.

Method Detail

listIterator

public abstract java.util.ListIterator listIterator(int index)
Returns a ListIterator over the list, starting from position index. Subclasses must provide an implementation of this method.

Parameters:
index - the starting position of the list
Returns:
the list iterator
Throws:
java.lang.IndexOutOfBoundsException - if index < 0 || index > size()

add

public void add(int index,
                java.lang.Object o)
Insert an element into the list at a given position (optional operation). This shifts all existing elements from that position to the end one index to the right. This version of add has no return, since it is assumed to always succeed if there is no exception. This iteration uses listIterator(index).add(o).

Parameters:
index - the location to insert the item
o - the object to insert
Throws:
java.lang.UnsupportedOperationException - if this list does not support the add 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 reason

addAll

public boolean addAll(int index,
                      java.util.Collection c)
Insert the contents of a collection into the list at a given position (optional operation). Shift all elements at that position to the right by the number of elements inserted. This operation is undefined if this list is modified during the operation (for example, if you try to insert a list into itself).

This implementation grabs listIterator(index), then proceeds to use add for each element returned by c's iterator. Sun's online specs are wrong, claiming that this also calls next(): listIterator.add() correctly skips the added element.

Parameters:
index - the location to insert the collection
c - the collection to insert
Returns:
true if the list was modified by this action, that is, if c is non-empty
Throws:
java.lang.UnsupportedOperationException - if this list does not support the addAll operation
java.lang.IndexOutOfBoundsException - if index < 0 || index > size()
java.lang.ClassCastException - if some element of c cannot be added to this list due to its type
java.lang.IllegalArgumentException - if some element of c cannot be added to this list for some other reason
java.lang.NullPointerException - if the specified collection is null
See Also:
add(int, Object)

get

public java.lang.Object get(int index)
Get the element at a given index in this list. This implementation returns listIterator(index).next().

Parameters:
index - the index of the element to be returned
Returns:
the element at index index in this list
Throws:
java.lang.IndexOutOfBoundsException - if index < 0 || index >= size()

iterator

public java.util.Iterator iterator()
Obtain an Iterator over this list, whose sequence is the list order. This implementation returns listIterator().

Returns:
an Iterator over the elements of this list, in order

remove

public java.lang.Object remove(int index)
Remove the element at a given position in this list (optional operation). Shifts all remaining elements to the left to fill the gap. This implementation uses listIterator(index) and ListIterator.remove().

Parameters:
index - the position within the list of the object to remove
Returns:
the object that was removed
Throws:
java.lang.UnsupportedOperationException - if this list does not support the remove operation
java.lang.IndexOutOfBoundsException - if index < 0 || index >= size()

set

public java.lang.Object set(int index,
                            java.lang.Object o)
Replace an element of this list with another object (optional operation). This implementation uses listIterator(index) and ListIterator.set(o).

Parameters:
index - the position within this list of the element to be replaced
o - the object to replace it with
Returns:
the object that was replaced
Throws:
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 reason


Copyright © 2004 The Ozone Database Project - www.ozone-db.org. All Rights Reserved.