net.cscott.jutil

Class ListFactory<V>

public abstract class ListFactory<V> extends CollectionFactory<V>

ListFactory is a List generator. Subclasses should implement constructions of specific types of Lists. ListFactory also has a set of static helper methods for building List objects.

Note also that the current limitations on parametric types in Java mean that we can't easily type this class as ListFactory<L extends List<V>,V>, as ListFactory<LinkedList<V>,V> is not a subtype of ListFactory<List<V>,V>, even though LinkedList is a subtype of List.

Version: $Id: ListFactory.java,v 1.2 2004/01/13 20:47:05 cananian Exp $

Author: Felix S. Klock II

Constructor Summary
ListFactory()
Creates a ListFactory.
Method Summary
static <E> List<E>concatenate(List<List<E>> lists)
Creates and returns an unmodifiable List view of the list made from connecting lists together in order.
List<V>makeCollection()
List<V>makeCollection(int initCapacity)
List<V>makeCollection(Collection<? extends V> c)
List<V>makeList()
Generates a new, mutable, empty List.
List<V>makeList(int initialCapacity)
Generates a new, mutable, empty List, using initialCapacity as a hint to use for the capacity for the produced List.
abstract List<V>makeList(Collection<? extends V> c)
Generates a new mutable List, using the elements of c as a template for its initial contents.
static <E> List<E>singleton(E o)
Creates and returns an immutable List of one element.

Constructor Detail

ListFactory

public ListFactory()
Creates a ListFactory.

Method Detail

concatenate

public static <E> List<E> concatenate(List<List<E>> lists)
Creates and returns an unmodifiable List view of the list made from connecting lists together in order.
requires: lists is a List of Lists.
effects:
let l0 = (List) lists.get(0)
	         l1 = (List) lists.get(1)
		 ...
		 ln = (List) lists.get(n) where n is lists.size()-1
	     returns a list view
	         [ l0.get(0) , l0.get(1), ... , l0.get(l0.size()-1), 
		   l1.get(0) , l1.get(1), ... , l1.get(l1.size()-1),
		   ...
		   ln.get(0) , ln.get(1), ... , ln.get(ln.size()-1) ]
	
Note that not only changes to the elements of lists are reflected in the returned List, but even changes to lists itself (adding or removing lists) are also reflected.

makeCollection

public final List<V> makeCollection()

makeCollection

public final List<V> makeCollection(int initCapacity)

makeCollection

public final List<V> makeCollection(Collection<? extends V> c)

makeList

public List<V> makeList()
Generates a new, mutable, empty List.

makeList

public List<V> makeList(int initialCapacity)
Generates a new, mutable, empty List, using initialCapacity as a hint to use for the capacity for the produced List.

makeList

public abstract List<V> makeList(Collection<? extends V> c)
Generates a new mutable List, using the elements of c as a template for its initial contents.

singleton

public static <E> List<E> singleton(E o)
Creates and returns an immutable List of one element.
effects: returns the list [ o ]
Copyright © 2003 C. Scott Ananian