私のアプリはTreeMapを使用してデータを並べ替え、log(n)のルックアップと挿入を行います。これは、アプリの実行中の一般的なケースではうまく機能しますが、アプリを最初に起動するときに、ソートされた順序(昇順)で取得する数百万の長さでTreeMapを初期化する必要があります。
これらの初期化値はすでにソートされているので、ツリーの挿入と再バランスのlog(n)コストを支払うことなく、それらをTreeMapに挿入する方法はありますか?
もちろん!TreeMap.putAll
メソッド(およびSortedMapを受け取るTreeMapコンストラクター)は、内部で呼び出されるメソッドを呼び出します。buildFromSorted
これは、ドキュメントで「並べ替えられたデータからの線形時間ツリー構築アルゴリズム」として説明されているため、希望どおりに機能するように聞こえます。
Mapを実装するものをメソッドに指定するだけputAll
ですが、マップのエントリセットイテレータ(Map.entrySet().iterator()
)は、並べ替えられた値のリストを返します。