<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements.  See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License.  You may obtain a copy of the License at

     http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<html>
<head>
<title>Status File for Apache Commons "Collections" Package</title>
<head>
<body bgcolor="white">


<div align="center">
<h1>The Apache Commons <em>Collections</em> Package</h1>
$Id$<br>
<a href="#Introduction">[Introduction]</a>
<a href="#Dependencies">[Dependencies]</a>
<a href="#Release Info">[Release Info]</a>
<a href="#Committers">[Committers]</a>
<a href="#Action Items">[Action Items]</a>
<br><br>
</div>


<a name="Introduction"></a>
<h3>1.  INTRODUCTION</h3>

<p>The <em>Collections</em> package contains a set of Java classes that
extend or augment the Java Collections Framework. This includes new interfaces
and new implementations together with supporting utility classes.

<p>In addition to the main commons-collections jar, a testframework jar file is also produced.

<a name="Dependencies"></a>
<h3>2.  DEPENDENCIES</h3>

<p>The <em>Collections</em> package is dependent upon the following external
components for development and use:</p>
<ul>
<li><a href="http://java.sun.com/j2se">Java Development Kit</a>
    (Version 1.2 or later)</li>
<li><a href="http://www.junit.org">JUnit Testing Framework</a>
    (Version 3.8.1 or later) - for unit tests only, not required
    for deployment</li>
</ul>


<a name="Release Info"></a>
<h3>3.  RELEASE INFO</h3>

<p>Current Release:
<a href="http://jakarta.apache.org/site/binindex.cgi">Version 3.2</a>

<p>Planned Next Release:  3.3</p>

<a name="Committers"></a>
<h3>4.  COMMITTERS</h3>

<p>The following individuals are the primary developers and maintainers of this
component.  Developers who plan to use <em>Collections</em> in their own
projects are encouraged to collaborate on the future development of this
component to ensure that it continues to meet a variety of needs.</p>
<ul>
   <li><a href="mailto:morgand@apache.org">Morgan Delagrange</a></li>
   <li><a href="mailto:donaldp@apache.org">Peter Donald</a></li>
   <li><a href="mailto:geirm@apache.org">Geir Magnusson Jr.</a></li>
   <li><a href="mailto:craigmcc@apache.org">Craig McClanahan</a></li>
   <li><a href="mailto:jstrachan@apache.org">James Strachan</a></li>
   <li><a href="mailto:rwaldhoff@apache.org">Rodney Waldhoff</a></li>
   <li><a href="mailto:jvanzyl@apache.org">Jason van Zyl</a></li>
   <li><a href="mailto:bayard@apache.org">Henri Yandell</a></li>
   <li><a href="mailto:scolebourne@apache.org">Stephen Colebourne</a></li>
   <li><a href="mailto:rdonkin@apache.org">Robert Burrell Donkin</a></li>
   <li><a href="mailto:psteitz@apache.org">Phil Steitz</a></li>
   <li><a href="mailto:matth@apache.org">Matthew Hawthorne</a></li>
   <li><a href="mailto:jcarman@apache.org">James Carman</a></li>
   <li>Arun M. Thomas</li>
</ul>

<a name="Action Items"></a>
<h3>5.  ACTION ITEMS</h3>

<p>
Want to help?
All ideas and suggestions should be made to the commons mailing lists,
commons-user at jakarta.apache.org and commons-dev at jakarta.apache.org.
Please prefix any emails by [collections] to pass mail filters.
</p>

</body>
</html>
