| | 1. GNU Trove | By: | | License: | GNU Library or Lesser General Public License (LGPL) | URL: | http://trove4j.sourceforge.net/ | Description: | GNU Trove: High performance collections for Java.
|
2. Commons-Collections | By: | | License: | Apache Software License | URL: | http://jakarta.apache.org/commons/collections/ | Description: | The Java Collections Framework was a major addition in JDK 1.2. It added many powerful data structures that accelerate development of most significant Java applications. Since that time it has become the recognised standard for collection handling in Java.
Commons-Collections seek to build upon the JDK classes by providing new interfaces, implementations and utilities. There are many features, including:
1) Bag interface for collections that have a number of copies of each object
2) Buffer interface for collections that have a well defined removal order, like FIFOs
3) BidiMap interface for maps that can be looked up from value to key as well and key to value
4) MapIterator interface to provide simple and quick iteration over maps
5) Type checking decorators to ensure that only instances of a certain type can be added
6) Transforming decorators that alter each object as it is added to the collection
7) Composite collections that make multiple collections look like one
8) Ordered maps and sets that retain the order elements are added in, including an LRU based map
9) Identity map that compares objects based on their identity (==) instead of the equals method
10) Reference map that allows keys and/or values to be garbage collected under close control
11) Many comparator implementations
12) Many iterator implementations
13) Adapter classes from array and enumerations to collections
14) Utilities to test or create typical set-theory properties of collections such as union, intersection, and closure
|
3. Commons Primitives | By: | | License: | Apache Software License | URL: | http://jakarta.apache.org/commons/primitives/ | Description: | The Java language is mostly Object based, however the original designers chose to include eight primitive types - boolean, byte, char, double, float, int, long and short. Commons Primitives provides a library of collections and utilities specially designed for use with primitive types.
JDK 1.5 added auto-boxing to simplify working with primitive types. This is simply a mechanism of automatically converting a primitive to an Object and vice versa, an operation with potentially large memory and performance issues. Commons Primitives offers collections that hold the primitive type directly, and as a result they are usually smaller, faster and easier to work with than their purely Object based alternatives.
|
4. Primitive Collections for Java (PCJ) | By: | | License: | GNU Library or Lesser General Public License (LGPL) | URL: | http://pcj.sourceforge.net/ | Description: | Primitive Collections for Java (PCJ) is a set of collection classes for primitive data types in Java. The goal is to provide an efficient alternative to the Java Collections Framework (JCF) when using primitive data types, such as int, boolean, or double. Some of its main features are:
Interface hierarchy for all primitive types. PCJ provides symmetrical interface hierarchy for each of the primitive Java data types: boolean, char, byte, short, int, long, float, and double. Each hierarchy includes interfaces for general collections, sets, lists, and maps. To increase the learning rate and make adaptions easier to implement, each hierarchy resembles the interfaces of JCF as close as possible.
Full interoperability with JCF classes. Each of the main collection interfaces is accompanied by adapters to and from the corresponding JCF collections. Adaption is made convenient by factory methods in the Adapter class.
Specialized implementations. While JCF and many of the classes in PCJ perform well in the general case, much can be saved by choosing a more specialized and restricted implementation. PCJ provides a number of such classes, including range based sets (see for example CharRangeSet) and bit array based sets (see for example IntBitSet).
High Performance. Benchmarks show good performance results for PCJ collections. The benchmark results are available in the the developer's guide.
|
5. Type-Specific Collections Library | By: | | License: | MIT License | URL: | http://www.sosnoski.com/opensrc/tclib/index.html | Description: | The biggest performance problem with the standard classes is that they only work with objects, not with primitive types. To build a collection of primitive values, such as ints, you need to create an object wrapper for each value added to the collection. This causes considerable overhead both when initially adding values and when accessing the values later, since you have to first cast the object reference to the appropriate type and then retrieve the actual value.
Even with collections of objects, the library classes are not optimized for performance. Timing measurements listed under the Timings topic show a better than 20 percent increase in performance using the classes from this library in a test with Integer objects and generic collections. For primitive int values in a type-specific collection the performance increase is much greater, to almost 4 times that for the Integers in a standard IntArray.
In addition, these library classes allow more robust code because no casting of values is required. Casting bypasses the type checking done by the compiler and defers the checking to runtime, when mistakes are generally a lot more painful to catch. Using type-specific collections restores the type checking responsibility to the compiler and assures that errors are caught before they're turned into executing code. Getting rid of the casts also makes your code cleaner and easier to understand.
|
6. fastutil | By: | | License: | GNU Library or Lesser General Public License (LGPL) | URL: | http://fastutil.dsi.unimi.it/ | Description: | fastutil extends the Java Collections Framework by providing type-specific maps, sets, lists and queues with a small memory footprint and fast access and insertion; it also includes a fast I/O API for binary and text files. It is free software distributed under the GNU Lesser General Public License.
The classes implement their standard counterpart interface (e.g., Map for maps) and can be plugged into existing code. Moreover, they provide additional features (such as bidirectional iterators) that are not available in the standard classes.
|
7. Mango | By: | | License: | GNU Library or Lesser General Public License (LGPL) | URL: | http://www.jezuk.co.uk/cgi-bin/view/mango | Description: | Mango is a Java library consisting of a number of iterators, algorithms and functions, loosely inspired by the C++ Standard Template Library.
|
8. JoSQL | By: | | License: | Apache Software License | URL: | http://josql.sourceforge.net | Description: | JoSQL (SQL for Java Objects) provides the ability for a developer to apply a SQL statement to a collection of Java Objects. JoSQL provides the ability to search, order and group ANY Java objects and should be applied when you want to perform SQL-like queries on a collection of Java Objects.
|
|