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パフォーマンスは、ハッシュ関数とキー空間の衝突率に依存します。すべてのキーが同じハッシュ チェーンで終わる最悪のケースでは、HashMaphasO(N)ルックアップが発生します。
- 理論的には、可能な最大ハッシュ配列サイズに達する
HashMapとパフォーマンスが向上します。O(N)つまり、~2^31 エントリです。しかし、これHashMapほど大きな がある場合は、おそらくメモリ使用量とガベージ コレクションの特性が優れた代替マップの実装を検討する必要があります。