主要コレクションライブラリの機能比較
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ファイルのサイズも巨大です。