<html>
<head>
<title>Proposal for Collections Package</title>
</head>
<body bgcolor="white">

<div align="center">
<h1>Proposal for <em>Collections</em> Package</h1>
</div>

<h3>(0) Rationale</h3>
<p>
   The Java Collections Framework provides a set of abstract data
   type interfaces and implementations that offer both a wealth
   of useful functionality, and a solid foundation for extending
   that functionality.
</p>
<p>
   Many Jakarta projects have needs or design criteria that extend
   beyond the core Collections API, such as introducing new abstract
   data types (e.g., Avalon's BinaryHeap) or changing the behaviour of
   existing abstract data types (e.g., Struts' FastHashMap).
</p>
<p>
   In keeping with the spirit of the Collections API and of abstract
   data types in general, these components can and should be shared
   assets.  A Commons package for abstract data types would provide
   encourage the development and reuse of a robust set of collections
   classes.
</p>

<h3>(1) Scope of the Package</h3>
<p>
   The package will create and maintain a set of collections and
   related classes designed to be compatible with the Java Collections
   Framework, and to be distributed under the ASF license.
</p>

<h3>(1.5) Interaction With Other Packages</h3>

<p><em>Collections</em> relies only on standard JDK 1.2 (or later) APIs for
production deployment.  It utilizes the JUnit unit testing framework for
developing and executing unit tests, but this is of interest only to
developers of the component.  Collections will also be a dependency for
several future proposed components for the Jakarta Commons subproject.

<p>No external configuration files are utilized.</p>

<h3>(2) Initial Source of the Package</h3>

<p>
   The initial codebase was harvested from existing and purposed
   Jakarta packages, including the Commons Database Connection Pool,
   Struts, and Avalon.
</p>

<p>The proposed package name for the new component is
<code>org.apache.commons.collections</code>.</p>


<h3>(3)  Required Jakarta-Commons Resources</h3>

<ul>
<li>CVS Repository - New directory <code>collections</code> in the
    <code>jakarta-commons</code> CVS repository.  All initial committers
    are already committers on <code>jakarta-commons</code>, so no
    additional user setups are required.</li>
<li>Mailing List - Discussions will take place on the general
    <em>jakarta-commons@jakarta.apache.org</em> mailing list.  To help
    list subscribers identify messages of interest, it is suggested that
    the message subject of messages about this component be prefixed with
    [Collections].</li>
<li>Bugzilla - New component "Collections" under the "Commons" product
    category, with appropriate version identifiers as needed.</li>
<li>Jyve FAQ - New category "commons-collections" (when available).
</ul>


<h3>(4) Initial Committers</h3>
<ul>
   <li>Peter Donald</li>
   <li>Craig McClanahan</li>
   <li>Rodney Waldhoff</li>
</ul>
</body>
</html>
