24

JCF(Java Collection Framework)にBag実装がない理由がわかりません(重複を許可し、順序を維持しないため)。 Bagパフォーマンスは、JCFの現在のコレクション実装よりもはるかに優れています。

  • Bag私はJavaで実装する方法を知っています。
  • BagはApacheコモンズで利用できることを知っています。
  • として使用できる他の実装があることは知っていますがBag、他の実装では、と比較してやるべきことがたくさんありBagます。

Javaコレクションフレームワークがこのような直接実装を提供していないのはなぜですか?

4

3 に答える 3

15

この質問に最もよく答えるので、私のコメントを回答として投稿します。

ここに提出されたバグレポートから:

コレクションフレームワークのメンテナの間には、これらのインターフェイス/クラスを設計および実装することにあまり熱心ではありません。個人的には必要だったのを思い出せません。JDKの外部で開発された人気のあるパッケージは、現実の世界でその価値が証明された後、JDKにインポートされる可能性が高くなります。

バッグのサポートの必要性は今日有効です。

グアバはそれをサポートしています。また、GS-Collections

于 2013-03-25T14:39:44.467 に答える
3

現在、バッグはコレクション契約に違反しています。多くのメソッドが現在のコレクションルールと競合しています。

「バッグは、オブジェクトがコレクションに表示される回数をカウントするコレクションです。を含むバッグがあるとします{a, a, b, c}。呼び出しgetCount(Object)a2を返し、呼び出しuniqueSet()はを返し{a, b, c}ます。

このインターフェースは収集契約に違反していることに注意してください。これらのメソッドの多くで指定されている動作は、Collectionで指定されている動作と同じではありません。非準拠のメソッドは、要約行に「(違反)」と明確にマークされています。このクラスの将来のバージョンでは、Collectionと同じ動作が指定されますが、残念ながら、このバージョンとの下位互換性が失われます。」

 boolean add(java.lang.Object o)
      (Violation) Add the given object to the bag and keep a count.

 boolean removeAll(java.util.Collection c)
      (Violation) Remove all elements represented in the given collection, respecting cardinality.

詳細については、リンクを参照してください:こちら

于 2014-07-01T09:03:10.983 に答える
0

JDKは、共通のデータ構造の実装を提供し、共通の構造が目的を果たさない場合は何でも実装できるようにします。彼らはそれが一般的なデータ構造ではないと考えていたかもしれません。実用性から、彼らがそこにあるすべてのデータ構造を実装したり、すべての人の要件を満たすことは不可能です。あなたが一般的だと思うことは、大多数にとって一般的ではないかもしれません。

于 2013-03-25T06:45:07.243 に答える