gnu.trove

Class TLinkedList

public class TLinkedList extends AbstractSequentialList implements Serializable

A LinkedList implementation which holds instances of type TLinkable.

Using this implementation allows you to get java.util.LinkedList behavior (a doubly linked list, with Iterators that support insert and delete operations) without incurring the overhead of creating Node wrapper objects for every element in your list.

The requirement to achieve this time/space gain is that the Objects stored in the List implement the TLinkable interface.

The limitations are that you cannot put the same object into more than one list or more than once in the same list. You must also ensure that you only remove objects that are actually in the list. That is, if you have an object A and lists l1 and l2, you must ensure that you invoke List.remove(A) on the correct list. It is also forbidden to invoke List.remove() with an unaffiliated TLinkable (one that belongs to no list): this will destroy the list you invoke it on.

Created: Sat Nov 10 15:25:10 2001

Version: $Id: TLinkedList.java,v 1.4 2002/04/08 02:02:28 ericdf Exp $

Author: Eric D. Friedman

See Also: TLinkable

Nested Class Summary
protected classTLinkedList.IteratorImpl
A ListIterator that supports additions and deletions.
Field Summary
protected TLinkable_head
the head of the list
protected int_size
the number of elements in the list
protected TLinkable_tail
the tail of the list
Constructor Summary
TLinkedList()
Creates a new TLinkedList instance.
Method Summary
voidadd(int index, Object linkable)
Inserts linkable at index index in the list.
booleanadd(Object linkable)
Appends linkable to the end of the list.
voidaddBefore(TLinkable current, TLinkable newElement)
Inserts newElement into the list immediately before current.
voidaddFirst(Object linkable)
Inserts linkable at the head of the list.
voidaddLast(Object linkable)
Adds linkable to the end of the list.
voidclear()
Empties the list.
booleancontains(Object o)
A linear search for o in the list.
ObjectgetFirst()
Returns the head of the list
ObjectgetLast()
Returns the tail of the list.
protected voidinsert(int index, Object linkable)
Implementation of index-based list insertions.
ListIteratorlistIterator(int index)
Returns an iterator positioned at index.
booleanremove(Object o)
Removes the specified element from the list.
ObjectremoveFirst()
Remove and return the first element in the list.
ObjectremoveLast()
Remove and return the last element in the list.
intsize()
Returns the number of elements in the list.
Object[]toArray()
Copies the list's contents into a native array.
Object[]toUnlinkedArray()
Copies the list to a native array, destroying the next/previous links as the copy is made.

Field Detail

_head

protected TLinkable _head
the head of the list

_size

protected int _size
the number of elements in the list

_tail

protected TLinkable _tail
the tail of the list

Constructor Detail

TLinkedList

public TLinkedList()
Creates a new TLinkedList instance.

Method Detail

add

public void add(int index, Object linkable)
Inserts linkable at index index in the list. All values > index are shifted over one position to accomodate the new addition.

Parameters: index an int value linkable an object of type TLinkable

add

public boolean add(Object linkable)
Appends linkable to the end of the list.

Parameters: linkable an object of type TLinkable

Returns: always true

addBefore

public void addBefore(TLinkable current, TLinkable newElement)
Inserts newElement into the list immediately before current. All elements to the right of and including current are shifted over.

Parameters: current a TLinkable value currently in the list. newElement a TLinkable value to be added to the list.

addFirst

public void addFirst(Object linkable)
Inserts linkable at the head of the list.

Parameters: linkable an object of type TLinkable

addLast

public void addLast(Object linkable)
Adds linkable to the end of the list.

Parameters: linkable an object of type TLinkable

clear

public void clear()
Empties the list.

contains

public boolean contains(Object o)
A linear search for o in the list.

Parameters: o an Object value

Returns: a boolean value

getFirst

public Object getFirst()
Returns the head of the list

Returns: an Object value

getLast

public Object getLast()
Returns the tail of the list.

Returns: an Object value

insert

protected void insert(int index, Object linkable)
Implementation of index-based list insertions.

Parameters: index an int value linkable an object of type TLinkable

listIterator

public ListIterator listIterator(int index)
Returns an iterator positioned at index. Assuming that the list has a value at that index, calling next() will retrieve and advance the iterator. Assuming that there is a value before index in the list, calling previous() will retrieve it (the value at index - 1) and move the iterator to that position. So, iterating from front to back starts at 0; iterating from back to front starts at size().

Parameters: index an int value

Returns: a ListIterator value

remove

public boolean remove(Object o)
Removes the specified element from the list. Note that it is the caller's responsibility to ensure that the element does, in fact, belong to this list and not another instance of TLinkedList.

Parameters: o a TLinkable element already inserted in this list.

Returns: true if the element was a TLinkable and removed

removeFirst

public Object removeFirst()
Remove and return the first element in the list.

Returns: an Object value

removeLast

public Object removeLast()
Remove and return the last element in the list.

Returns: an Object value

size

public int size()
Returns the number of elements in the list.

Returns: an int value

toArray

public Object[] toArray()
Copies the list's contents into a native array. This will be a shallow copy: the Tlinkable instances in the Object[] array have links to one another: changing those will put this list into an unpredictable state. Holding a reference to one element in the list will prevent the others from being garbage collected unless you clear the next/previous links. Caveat programmer!

Returns: an Object[] value

toUnlinkedArray

public Object[] toUnlinkedArray()
Copies the list to a native array, destroying the next/previous links as the copy is made. This list will be emptied after the copy (as if clear() had been invoked). The Object[] array returned will contain TLinkables that do not hold references to one another and so are less likely to be the cause of memory leaks.

Returns: an Object[] value