java.util

Class ArrayList<E>

Implemented Interfaces:
Cloneable, Collection<E>, Iterable<E>, List<E>, RandomAccess, Serializable
Known Direct Subclasses:
AttributeList

public class ArrayList<E>
extends AbstractList<E>
implements List<E>, RandomAccess, Cloneable, Serializable

An array-backed implementation of the List interface. This implements all optional list operations, and permits null elements, so that it is better than Vector, which it replaces. Random access is roughly constant time, and iteration is roughly linear time, so it is nice and fast, with less overhead than a LinkedList.

Each list has a capacity, and as the array reaches that capacity it is automatically transferred to a larger array. You also have access to ensureCapacity and trimToSize to control the backing array's size, avoiding reallocation or wasted memory.

ArrayList is not synchronized, so if you need multi-threaded access, consider using:
List l = Collections.synchronizedList(new ArrayList(...));

The iterators are fail-fast, meaning that any structural modification, except for remove() called on the iterator itself, cause the iterator to throw a ConcurrentModificationException rather than exhibit non-deterministic behavior.

See Also:
Collection, List, LinkedList, Vector, Collections.synchronizedList(List), AbstractList, Serialized Form

Field Summary

Fields inherited from class java.util.AbstractList<E>

modCount

Constructor Summary

ArrayList()
Construct a new ArrayList with the default capacity (16).
ArrayList(E> c)
Construct a new ArrayList, and initialize it with the elements in the supplied Collection.
ArrayList(int capacity)
Construct a new ArrayList with the supplied initial capacity.

Method Summary

T[] toArray(T[] a)
Returns an Array whose component type is the runtime component type of the passed-in Array.
boolean
add(E e)
Appends the supplied element to the end of this list.
void
add(int index, E e)
Adds the supplied element at the specified index, shifting all elements currently at that index or higher one to the right.
boolean
addAll(E> c)
Add each element in the supplied Collection to this List.
boolean
addAll(int index, E> c)
Add all elements in the supplied collection, inserting them beginning at the specified index. c can contain objects of any type, as well as null values.
void
clear()
Removes all elements from this List
Object
clone()
Creates a shallow copy of this ArrayList (elements are not cloned).
boolean
contains(Object e)
Returns true iff element is in this ArrayList.
void
ensureCapacity(int minCapacity)
Guarantees that this list will have at least enough capacity to hold minCapacity elements.
E
get(int index)
Retrieves the element at the user-supplied index.
int
indexOf(Object e)
Returns the lowest index at which element appears in this List, or -1 if it does not appear.
boolean
isEmpty()
Checks if the list is empty.
int
lastIndexOf(Object e)
Returns the highest index at which element appears in this List, or -1 if it does not appear.
E
remove(int index)
Removes the element at the user-supplied index.
protected void
removeRange(int fromIndex, int toIndex)
Removes all elements in the half-open interval [fromIndex, toIndex).
E
set(int index, E e)
Sets the element at the specified index.
int
size()
Returns the number of elements in this list.
Object[]
toArray()
Returns an Object array containing all of the elements in this ArrayList.
void
trimToSize()
Trims the capacity of this List to be equal to its size; a memory saver.

Methods inherited from class java.util.AbstractList<E>

add, add, addAll, clear, equals, get, hashCode, indexOf, iterator, lastIndexOf, listIterator, listIterator, remove, removeRange, set, subList

Methods inherited from class java.util.AbstractCollection<E>

T[] toArray, add, addAll, clear, contains, containsAll, isEmpty, iterator, remove, removeAll, retainAll, size, toArray, toString

Methods inherited from class java.lang.Object

clone, equals, extends Object> getClass, finalize, hashCode, notify, notifyAll, toString, wait, wait, wait

Constructor Details

ArrayList

public ArrayList()
Construct a new ArrayList with the default capacity (16).

ArrayList

public ArrayList(E> c)
Construct a new ArrayList, and initialize it with the elements in the supplied Collection. The initial capacity is 110% of the Collection's size.
Parameters:
c - the collection whose elements will initialize this list
Throws:
NullPointerException - if c is null

ArrayList

public ArrayList(int capacity)
Construct a new ArrayList with the supplied initial capacity.
Parameters:
capacity - initial capacity of this ArrayList
Throws:
IllegalArgumentException - if capacity is negative

Method Details

T[] toArray

public  T[] toArray(T[] a)
Returns an Array whose component type is the runtime component type of the passed-in Array. The returned Array is populated with all of the elements in this ArrayList. If the passed-in Array is not large enough to store all of the elements in this List, a new Array will be created and returned; if the passed-in Array is larger than the size of this List, then size() index will be set to null.
Specified by:
T[] toArray in interface List<E>
T[] toArray in interface Collection<E>
Overrides:
T[] toArray in interface AbstractCollection<E>
Parameters:
a - the passed-in Array
Returns:
an array representation of this list
Throws:
ArrayStoreException - if the runtime type of a does not allow an element in this list
NullPointerException - if a is null

add

public boolean add(E e)
Appends the supplied element to the end of this list. The element, e, can be an object of any type or null.
Specified by:
add in interface List<E>
add in interface Collection<E>
Overrides:
add in interface AbstractList<E>
Parameters:
e - the element to be appended to this list
Returns:
true, the add will always succeed

add

public void add(int index,
                E e)
Adds the supplied element at the specified index, shifting all elements currently at that index or higher one to the right. The element, e, can be an object of any type or null.
Specified by:
add in interface List<E>
Overrides:
add in interface AbstractList<E>
Parameters:
index - the index at which the element is being added
e - the item being added
Throws:
IndexOutOfBoundsException - if index < 0 || index > size()

addAll

public boolean addAll(E> c)
Add each element in the supplied Collection to this List. It is undefined what happens if you modify the list while this is taking place; for example, if the collection contains this list. c can contain objects of any type, as well as null values.
Specified by:
addAll in interface List<E>
addAll in interface Collection<E>
Overrides:
addAll in interface AbstractCollection<E>
Parameters:
c - a Collection containing elements to be added to this List
Returns:
true if the list was modified, in other words c is not empty
Throws:
NullPointerException - if c is null

addAll

public boolean addAll(int index,
                      E> c)
Add all elements in the supplied collection, inserting them beginning at the specified index. c can contain objects of any type, as well as null values.
Specified by:
addAll in interface List<E>
Overrides:
addAll in interface AbstractList<E>
Parameters:
index - the index at which the elements will be inserted
c - the Collection containing the elements to be inserted
Throws:
IndexOutOfBoundsException - if index < 0 || index > 0
NullPointerException - if c is null

clear

public void clear()
Removes all elements from this List
Specified by:
clear in interface List<E>
clear in interface Collection<E>
Overrides:
clear in interface AbstractList<E>

clone

public Object clone()
Creates a shallow copy of this ArrayList (elements are not cloned).
Overrides:
clone in interface Object
Returns:
the cloned object

contains

public boolean contains(Object e)
Returns true iff element is in this ArrayList.
Specified by:
contains in interface List<E>
contains in interface Collection<E>
Overrides:
contains in interface AbstractCollection<E>
Parameters:
e - the element whose inclusion in the List is being tested
Returns:
true if the list contains e

ensureCapacity

public void ensureCapacity(int minCapacity)
Guarantees that this list will have at least enough capacity to hold minCapacity elements. This implementation will grow the list to max(current * 2, minCapacity) if (minCapacity > current). The JCL says explictly that "this method increases its capacity to minCap", while the JDK 1.3 online docs specify that the list will grow to at least the size specified.
Parameters:
minCapacity - the minimum guaranteed capacity

get

public E get(int index)
Retrieves the element at the user-supplied index.
Specified by:
get in interface List<E>
Overrides:
get in interface AbstractList<E>
Parameters:
index - the index of the element we are fetching
Throws:
IndexOutOfBoundsException - if index < 0 || index >= size()

indexOf

public int indexOf(Object e)
Returns the lowest index at which element appears in this List, or -1 if it does not appear.
Specified by:
indexOf in interface List<E>
Overrides:
indexOf in interface AbstractList<E>
Parameters:
e - the element whose inclusion in the List is being tested
Returns:
the index where e was found

isEmpty

public boolean isEmpty()
Checks if the list is empty.
Specified by:
isEmpty in interface List<E>
isEmpty in interface Collection<E>
Overrides:
isEmpty in interface AbstractCollection<E>
Returns:
true if there are no elements

lastIndexOf

public int lastIndexOf(Object e)
Returns the highest index at which element appears in this List, or -1 if it does not appear.
Specified by:
lastIndexOf in interface List<E>
Overrides:
lastIndexOf in interface AbstractList<E>
Parameters:
e - the element whose inclusion in the List is being tested
Returns:
the index where e was found

remove

public E remove(int index)
Removes the element at the user-supplied index.
Specified by:
remove in interface List<E>
Overrides:
remove in interface AbstractList<E>
Parameters:
index - the index of the element to be removed
Returns:
the removed Object
Throws:
IndexOutOfBoundsException - if index < 0 || index >= size()

removeRange

protected void removeRange(int fromIndex,
                           int toIndex)
Removes all elements in the half-open interval [fromIndex, toIndex). Does nothing when toIndex is equal to fromIndex.
Overrides:
removeRange in interface AbstractList<E>
Parameters:
fromIndex - the first index which will be removed
toIndex - one greater than the last index which will be removed
Throws:
IndexOutOfBoundsException - if fromIndex > toIndex

set

public E set(int index,
             E e)
Sets the element at the specified index. The new element, e, can be an object of any type or null.
Specified by:
set in interface List<E>
Overrides:
set in interface AbstractList<E>
Parameters:
index - the index at which the element is being set
e - the element to be set
Returns:
the element previously at the specified index
Throws:
IndexOutOfBoundsException - if index < 0 || index >= 0

size

public int size()
Returns the number of elements in this list.
Specified by:
size in interface List<E>
size in interface Collection<E>
Overrides:
size in interface AbstractCollection<E>
Returns:
the list size

toArray

public Object[] toArray()
Returns an Object array containing all of the elements in this ArrayList. The array is independent of this list.
Specified by:
toArray in interface List<E>
toArray in interface Collection<E>
Overrides:
toArray in interface AbstractCollection<E>
Returns:
an array representation of this list

trimToSize

public void trimToSize()
Trims the capacity of this List to be equal to its size; a memory saver.

ArrayList.java -- JDK1.2's answer to Vector; this is an array-backed implementation of the List interface Copyright (C) 1998, 1999, 2000, 2001, 2004, 2005 Free Software Foundation, Inc. This file is part of GNU Classpath. GNU Classpath is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. GNU Classpath is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNU Classpath; see the file COPYING. If not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Linking this library statically or dynamically with other modules is making a combined work based on this library. Thus, the terms and conditions of the GNU General Public License cover the whole combination. As a special exception, the copyright holders of this library give you permission to link this library with independent modules to produce an executable, regardless of the license terms of these independent modules, and to copy and distribute the resulting executable under terms of your choice, provided that you also meet, for each linked independent module, the terms and conditions of the license of that module. An independent module is a module which is not derived from or based on this library. If you modify this library, you may extend this exception to your version of the library, but you are not obligated to do so. If you do not wish to do so, delete this exception statement from your version.