TreeMap の配列の初期サイズを設定できると仮定するのは間違っていますか?
はい、その仮定は正しくありません。ATreeMap
には配列がありません。ATreeMap
は、2 つの子を持つバイナリ ノードを使用します。
ツリー ノード内の子の数をパラメーターにすることを提案している場合は、それが検索時間にどのように影響するかを把握する必要があります。O(log2N)
そして、検索時間をO(log2M * log2(N/M))
どこから何まで回すと思いますか?N
は要素M
数であり、ノードの子の平均数です。(そして、私はいくつかの楽観的な仮定をしています...) それは「勝利」ではありません。
それがとても遅いのは別の理由がありますか?
はい。TreeMap
最適な状況下でa (大) が a (大) に比べて遅い理由はHashMap
、N 個のエントリを持つバランスのとれた二分木を使用したルックアップでは、大まかlog2N
なツリー ノードを調べる必要があるためです。対照的に、最適なHashMap
ルックアップでは、1 つのハッシュコード計算とハッシュO(1)
チェーン ノードの参照が含まれます。
ノート:
TreeMap
バランスの取れたツリーを提供するバイナリ ツリー構成を使用するためO(log2N)
、最悪の場合のルックアップ時間です。
HashMap
パフォーマンスは、ハッシュ関数とキー空間の衝突率に依存します。すべてのキーが同じハッシュ チェーンで終わる最悪のケースでは、HashMap
hasO(N)
ルックアップが発生します。
- 理論的には、可能な最大ハッシュ配列サイズに達する
HashMap
とパフォーマンスが向上します。O(N)
つまり、~2^31 エントリです。しかし、これHashMap
ほど大きな がある場合は、おそらくメモリ使用量とガベージ コレクションの特性が優れた代替マップの実装を検討する必要があります。