主要コレクションライブラリの機能比較

Javaで有名と思われる、以下のコレクション拡張ライブラリを比較してみました。

Commons Collections Google Collections Library Commons Primitives Trove fastutil
Version 3.2.1 0.7 1.0 2.0.2 5.1.5
JAR Size 562kb 450kb 255kb 721kb 13,617kb
Bags (Multimaps)*1 O O - - -
Bidirectional Maps*2 O O - - -
Primitive ArrayLists*3 - - O O O
Primitive HashMaps - - - O O
Primitive TreeMaps - - - - O

Commons CollectionsとGoogle Collections Libraryは似ていますが、Googleの中の人いわく「うちの方がJDKのインタフェースに忠実。Commons Collectionsは独自仕様が多くて駄目」とのこと。

Troveは、以前のエントリでも書いたように、プリミティブじゃないHashSet / HashMap実装も提供しています。Sunの実装よりメモリ消費量が少なくて、かつ高速です。HatenarMapsでもTroveを使っています。

fastutilは、プリミティブなTreeMap実装があるのが素晴らしい。しかもAVL TreeとRed-Black Treeが両方入ってます。でも、JARファイルのサイズも巨大です。

*1:キーの重複が許されるSet / Map。

*2:値→キーの逆参照ができるMap。

*3:プリミティブ型に特化したArrayList