Google GuavaとApache Commons [非公開]
-
22-07-2019 - |
質問
Javaでの双方向マップの実装を探していたところ、次の2つのライブラリを見つけました。
- Google Guava (以前の" Google Collections")
- Apache Commonsコレクション
どちらも無料で、私が探していた双方向マップの実装(ApacheのBidiMap、GoogleのBiMap)があり、驚くほどほぼ同じサイズです(Apache 493 kB、Google 499 kB)[ed .: true! ]、すべての点で私にかなり似ているようです。
どちらを選択する必要があり、なぜですか?他の同等の代替手段はありますか(無料で、少なくとも双方向マップが必要です)?私は最新のJava SEで作業しているため、Java 5などに人為的に制限する必要はありません。
解決
私の意見では、 Guava (以前はGoogleと呼ばれていました)コレクション):
- より近代的です(ジェネリックがあります)
- Collections APIの要件に絶対に従います
- アクティブに維持されています
-
CacheBuilder
とその前身であるMapMaker
は素晴らしく素晴らしいです
Apache Commons Collectionsも優れたライブラリですが、ジェネリック対応バージョン(これは私の意見ではコレクションAPIの主要なの欠点)の提供に長い間失敗しており、一般的にはメンテナンス/ドントトゥトゥトゥトゥトゥトゥトゥトゥオンイットモード Recently Commons Collectionsが再び勢いを取り戻しましたが、やるべきことがあります。。
ダウンロードサイズ/メモリフットプリント/コードサイズが問題である場合、Apache Commons Collectionsは他のライブラリの一般的な依存関係であるため、より適切な候補になる可能性があります。したがって、追加の依存関係を追加せずに、独自のコードで使用することもできます。編集:この特定の「利点」多くの新しいライブラリは実際にはGuavaに依存しており、Apache Commonsコレクションには 依存していないため、現在では部分的に破壊されています。
他のヒント
私が見つけた最も重要なことは、Googleコレクションを開始する場所にします。
- ジェネリック(ジェネリックなしのコレクション-FTL)
- コレクションフレームワークとの一貫性(Josh Blochはこのフレームワークの主要なプレーヤーでした)
- 正しさ。これらの人たちは、この問題を正すことに必死に関係しています。 25Kの単体テストのようなものがあり、APIを適切に取得することに結びついています。
こちらは、主要著者によって行われた講演の Youtubeビデオです。彼はこのライブラリについて知っておく価値があるものについて議論するのに良い仕事をしています。
FAQから: Googleコレクションのよくある質問
Apache Commons Collectionsを改善しようとしたときにGoogleがこれらすべてを構築したのはなぜですか?
Apache Commons Collectionsは明らかに私たちのニーズを満たしていませんでした。それ ジェネリックを使用していません。 コードからのコンパイル警告。また、開催中です パターン"長い間。かなり必要になることがわかりました 喜んで使用するまで修正するための私たちからの大きな投資、 その間、私たち自身のライブラリはすでに有機的に成長していました。
Apacheライブラリと私たちのライブラリの重要な違いは、 私たちのコレクションは、 それらが実装するJDKインターフェイス。 Apacheを確認する場合 ドキュメントには、違反の無数の例があります。彼ら これらを非常に明確に指摘するのに値するが、それでも、逸脱している 標準のコレクションからの動作は危険です!あなたは何に注意する必要があります このようなコレクションを使用します。バグは常に発生するのを待っています。
コレクションは完全に生成され、契約に違反することはありません (JDK実装が強力なものを設定している、孤立した例外を伴う 許容される違反の前例)。これは、次のいずれかを渡すことができることを意味します Collectionを期待する任意のメソッドへのコレクションとフィール 物事が本来のとおりに機能すると確信しています。
2つのこと(間違っていないことを願っています)
- Guava(Googleコレクションの新しい名前)のライセンスはApache License 2.0です。つまり、Apache Commonsプロジェクトと同じものです
- ダウンロードするファイルにGuavaのソースコードが見つかりません(git-accessのみが可能です)
グアバの厄介な点の1つは、Multimapがjava.util.Mapを拡張しないことです。 Mapsで機能する独自のメソッドがある場合、Guava Multimapsでは機能しません(Apache MultiMapインターフェイスはjava.util.Mapを拡張します)。私はそれがそうである方法であるいくつかの正当な理由があると確信していますが、それはまた不便です。