FileDocCategorySizeDatePackage
AbstractList.javaAPI DocAndroid 1.5 API25285Wed May 06 22:41:04 BST 2009java.util

AbstractList

public abstract class AbstractList extends AbstractCollection implements List
{@code AbstractList} is an abstract implementation of the {@code List} interface, optimized for a backing store which supports random access. This implementation does not support adding or replacing. A subclass must implement the abstract methods {@code get()} and {@code size()}, and to create a modifiable {@code List} it's necessary to override the {@code add()} method that currently throws an {@code UnsupportedOperationException}.
since
Android 1.0

Fields Summary
protected transient int
modCount
A counter for changes to the list.
Constructors Summary
protected AbstractList()
Constructs a new instance of this AbstractList.

since
Android 1.0

        super();
    
Methods Summary
public voidadd(int location, E object)
Inserts the specified object into this List at the specified location. The object is inserted before any previous element at the specified location. If the location is equal to the size of this List, the object is added at the end. Concrete implementations that would like to support the add functionality must override this method.

param
location the index at which to insert.
param
object the object to add.
throws
UnsupportedOperationException if adding to this List is not supported.
throws
ClassCastException if the class of the object is inappropriate for this List
throws
IllegalArgumentException if the object cannot be added to this List
throws
IndexOutOfBoundsException if {@code location < 0 || >= size()}
since
Android 1.0

        throw new UnsupportedOperationException();
    
public booleanadd(E object)
Adds the specified object at the end of this List.

param
object the object to add
return
true
throws
UnsupportedOperationException if adding to this List is not supported
throws
ClassCastException if the class of the object is inappropriate for this List
throws
IllegalArgumentException if the object cannot be added to this List
since
Android 1.0

        add(size(), object);
        return true;
    
public booleanaddAll(int location, java.util.Collection collection)
Inserts the objects in the specified Collection at the specified location in this List. The objects are added in the order they are returned from the collection's iterator.

param
location the index at which to insert.
param
collection the Collection of objects
return
{@code true} if this List is modified, {@code false} otherwise.
throws
UnsupportedOperationException if adding to this list is not supported.
throws
ClassCastException if the class of an object is inappropriate for this list.
throws
IllegalArgumentException if an object cannot be added to this list.
throws
IndexOutOfBoundsException if {@code location < 0 || > size()}
since
Android 1.0

        Iterator<? extends E> it = collection.iterator();
        while (it.hasNext()) {
            add(location++, it.next());
        }
        return !collection.isEmpty();
    
public voidclear()
Removes all elements from this list, leaving it empty.

throws
UnsupportedOperationException if removing from this list is not supported.
see
List#isEmpty
see
List#size
since
Android 1.0

        removeRange(0, size());
    
public booleanequals(java.lang.Object object)
Compares the specified object to this list and return true if they are equal. Two lists are equal when they both contain the same objects in the same order.

param
object the object to compare to this object.
return
{@code true} if the specified object is equal to this list, {@code false} otherwise.
see
#hashCode
since
Android 1.0

        if (this == object) {
            return true;
        }
        if (object instanceof List) {
            List<?> list = (List<?>) object;
            if (list.size() != size()) {
                return false;
            }

            Iterator<?> it1 = iterator(), it2 = list.iterator();
            while (it1.hasNext()) {
                Object e1 = it1.next(), e2 = it2.next();
                if (!(e1 == null ? e2 == null : e1.equals(e2))) {
                    return false;
                }
            }
            return true;
        }
        return false;
    
public abstract Eget(int location)
Returns the element at the specified location in this list.

param
location the index of the element to return.
return
the element at the specified index.
throws
IndexOutOfBoundsException if {@code location < 0 || >= size()}
since
Android 1.0

public inthashCode()
Returns the hash code of this list. The hash code is calculated by taking each element's hashcode into account.

return
the hash code.
see
#equals
see
List#hashCode()
since
Android 1.0

        int result = 1;
        Iterator<?> it = iterator();
        while (it.hasNext()) {
            Object object = it.next();
            result = (31 * result) + (object == null ? 0 : object.hashCode());
        }
        return result;
    
public intindexOf(java.lang.Object object)
Searches this list for the specified object and returns the index of the first occurrence.

param
object the object to search for.
return
the index of the first occurrence of the object, or -1 if it was not found.
since
Android 1.0

        ListIterator<?> it = listIterator();
        if (object != null) {
            while (it.hasNext()) {
                if (object.equals(it.next())) {
                    return it.previousIndex();
                }
            }
        } else {
            while (it.hasNext()) {
                if (it.next() == null) {
                    return it.previousIndex();
                }
            }
        }
        return -1;
    
public java.util.Iteratoriterator()
Returns an iterator on the elements of this list. The elements are iterated in the same order as they occur in the list.

return
an iterator on the elements of this list.
see
Iterator
since
Android 1.0

        return new SimpleListIterator();
    
public intlastIndexOf(java.lang.Object object)
Searches this list for the specified object and returns the index of the last occurrence.

param
object the object to search for.
return
the index of the last occurrence of the object, or -1 if the object was not found.
since
Android 1.0

        ListIterator<?> it = listIterator(size());
        if (object != null) {
            while (it.hasPrevious()) {
                if (object.equals(it.previous())) {
                    return it.nextIndex();
                }
            }
        } else {
            while (it.hasPrevious()) {
                if (it.previous() == null) {
                    return it.nextIndex();
                }
            }
        }
        return -1;
    
public java.util.ListIteratorlistIterator()
Returns a ListIterator on the elements of this list. The elements are iterated in the same order that they occur in the list.

return
a ListIterator on the elements of this list
see
ListIterator
since
Android 1.0

        return listIterator(0);
    
public java.util.ListIteratorlistIterator(int location)
Returns a list iterator on the elements of this list. The elements are iterated in the same order as they occur in the list. The iteration starts at the specified location.

param
location the index at which to start the iteration.
return
a ListIterator on the elements of this list.
throws
IndexOutOfBoundsException if {@code location < 0 || location > size()}
see
ListIterator
since
Android 1.0

        return new FullListIterator(location);
    
public Eremove(int location)
Removes the object at the specified location from this list.

param
location the index of the object to remove.
return
the removed object.
throws
UnsupportedOperationException if removing from this list is not supported.
throws
IndexOutOfBoundsException if {@code location < 0 || >= size()}
since
Android 1.0

        throw new UnsupportedOperationException();
    
protected voidremoveRange(int start, int end)
Removes the objects in the specified range from the start to the end index minus one.

param
start the index at which to start removing.
param
end the index after the last element to remove.
throws
UnsupportedOperationException if removing from this list is not supported.
throws
IndexOutOfBoundsException if {@code start < 0} or {@code start >= size()}.
since
Android 1.0

        Iterator<?> it = listIterator(start);
        for (int i = start; i < end; i++) {
            it.next();
            it.remove();
        }
    
public Eset(int location, E object)
Replaces the element at the specified location in this list with the specified object.

param
location the index at which to put the specified object.
param
object the object to add.
return
the previous element at the index.
throws
UnsupportedOperationException if replacing elements in this list is not supported.
throws
ClassCastException if the class of an object is inappropriate for this list.
throws
IllegalArgumentException if an object cannot be added to this list.
throws
IndexOutOfBoundsException if {@code location < 0 || >= size()}
since
Android 1.0

        throw new UnsupportedOperationException();
    
public java.util.ListsubList(int start, int end)
Returns a part of consecutive elements of this list as a view. The returned view will be of zero length if start equals end. Any change that occurs in the returned subList will be reflected to the original list, and vice-versa. All the supported optional operations by the original list will also be supported by this subList.

This method can be used as a handy method to do some operations on a sub range of the original list, for example {@code list.subList(from, to).clear();}

If the original list is modified in other ways than through the returned subList, the behavior of the returned subList becomes undefined.

The returned subList is a subclass of AbstractList. The subclass stores offset, size of itself, and modCount of the original list. If the original list implements RandomAccess interface, the returned subList also implements RandomAccess interface.

The subList's set(int, Object), get(int), add(int, Object), remove(int), addAll(int, Collection) and removeRange(int, int) methods first check the bounds, adjust offsets and then call the corresponding methods of the original AbstractList. addAll(Collection c) method of the returned subList calls the original addAll(offset + size, c).

The listIterator(int) method of the subList wraps the original list iterator. The iterator() method of the subList invokes the original listIterator() method, and the size() method merely returns the size of the subList.

All methods will throw a ConcurrentModificationException if the modCount of the original list is not equal to the expected value.

param
start start index of the subList (inclusive).
param
end end index of the subList, (exclusive).
return
a subList view of this list starting from {@code start} (inclusive), and ending with {@code end} (exclusive)
throws
IndexOutOfBoundsException if (start < 0 || end > size())
throws
IllegalArgumentException if (start > end)
since
Android 1.0

        if (0 <= start && end <= size()) {
            if (start <= end) {
                if (this instanceof RandomAccess) {
                    return new SubAbstractListRandomAccess<E>(this, start, end);
                }
                return new SubAbstractList<E>(this, start, end);
            }
            throw new IllegalArgumentException();
        }
        throw new IndexOutOfBoundsException();