コレクションでは、要件に応じてセットまたはマップを並べ替えることができます。Treeset または TreeMap もソートされたコレクションを提供します。ソートされたコレクションが必要な場合にツリーセットを使用する利点はありますか
4 に答える
私の前のポスターは、重要な基準について言及していません: コレクション内の要素が挿入後に状態を頻繁に変更する場合、つまり、同じコレクションを数回再ソートする必要がある場合、要素は挿入中にのみソートされるため、 TreeSet
orは理想的ではない可能性があります。 TreeMap
、その後はありません。TreeSet
つまり、 /内の要素のソート キーを変更すると、TreeMap
自動的に再ソートされません。要素を更新する前にコレクションから削除し、更新後に再度追加して、正しい場所に挿入されるようにする必要があります。私のUpdateableTreeSetを使用して、並べ替えを維持できますTreeSet
。
上記のことから、この場合、ソートされていないコレクションとCollections.sort()
オンデマンドを使用する方が簡単な方法であると結論付けることができます。全体的にどの方法が速いかは、状況によって異なります。ソートキーUpdateableTreeSet
を実際に変更する場所に限定して、既存のコレクションのソートを維持するのにかなり役立つはずです。
ツリーセット
必要なときはいつでも、ソートされたセットを持つことは常に有益です。
- log(n) 基本操作 (追加、削除、および含む) の時間コスト
- TreeSet には、first()、last()、headSet()、tailSet() などの順序付きセットを処理する便利なメソッドがほとんどありません。
- 独自のコンパレータを指定しない場合、TreeSet 内の項目は自然な順序に従って自動的に並べ替えられます。
また、TreeSet のドキュメントも参照してください。ツリーセット
一番大きな違いは
TreeSet
常にソートされたデータを保持し、手動でソートして維持するセットは常にソートされるとは限りません。
TreeSet
セットを常にソートし続けたくない場合は、これをお勧めします。
他の人が言ったことに加えて、TreeSet には、サブセットをすばやく取得する機能など、いくつかの非常に優れた機能があります。
それ以外では、どのくらいの頻度で物事を整理する必要があるかという問題です。100 個のセットを作成する予定で、そのうちの 1 つまたは 2 つだけをソートする必要がある場合、挿入中のソートのオーバーヘッドはおそらく価値がありません。ただし、一度でもセットをソートする場合は、ツリー セットが最適です。