8

私はC++std :: mapの通常の実装の特徴を備えたJavaクラスを探しています(私が理解しているように、自己平衡二分探索木):

  1. 挿入/削除/検索のO(log n)パフォーマンス
  2. 各要素は、一意のキーとマップされた値で構成されます
  3. キーは厳密な弱順序に従います

オープンソースまたは設計ドキュメントを使用した実装を探しています。私はおそらく、プリミティブキー/値の独自のサポートをロールバックすることになります。

この質問のスタイルは次のようになります。Javaでstd::dequeに相当し、その答えは「JavaのプリミティブコレクションからのArrayDeque」でした。

4

3 に答える 3

8

ConcurrentSkipListMapは、スキップ リスト (O(log n) のパフォーマンスを備えた自己均衡ツリーのような構造) に基づくソートされたマップです。一般に、CSLM の境界は TreeMap (自己均衡型の赤黒ツリー impl) よりも厳しいため、おそらくパフォーマンスが向上しますが、TreeMap はそうではなく、スレッドセーフで並行性があるという副次的な利点があります。CSLM は JDK 1.6 で追加されました。

Troveには、プリミティブ型のコレクションのセットと、一般的な Java コレクション型のその他の興味深いバリアントがあります。

その他の興味深いコレクション ライブラリには、Google Collection ライブラリApache Commons Collectionsがあります。

于 2010-02-13T18:31:49.687 に答える
5

標準 Java ライブラリのバイナリ ツリーに最も近いクラスは java.util.TreeMap ですが、ボックス化を除いてプリミティブ型をサポートしていません (つまり、int は Integer としてラップされ、double は Double としてラップされるなど)。

java.util.HashMap は、大規模なマップのパフォーマンスを向上させる可能性があります。理論的には O(1) ですが、その正確なパフォーマンス特性は、キー クラスのハッシュ コード生成アルゴリズムに依存します。

Introduction to Collectionsによると、「配列 ... はプリミティブ データ型の格納をサポートする唯一のコレクションです。」

于 2010-02-13T17:46:25.380 に答える
2

commons-collectionsも見ることができますFastTreeMap

ボックス化せずにプリミティブ型をサポートするコレクションがたくさんあるとは思えないので、そのまま使用してください。オートボクシングのため、これは必ずしも必要ではありません。

本当にプリミティブを使用したい場合(不十分なパフォーマンスを示すベンチマークを作成した後!)、プリミティブのソースを確認し、FastTreeMapプリミティブを処理するためのメソッドを追加できます。

于 2010-02-13T18:05:09.880 に答える