web-dev-qa-db-ja.com

SortedSet <T> vs HashSet <T>

私の質問は、HashSet<T>があるときにSortedSet<T>が必要なのは何なのかということです。 HashSetのすべてのメソッドは、SortedSetでも使用できます。さらに、SortedSetは、既にソートされた方法でコレクションを提供するので有利です。それでもHashSetは存在します。それでは何に役立つのでしょうか?

42
Batrickparry

並べ替えが必要ない場合は、並べ替えを行うクラスを使用しないでください。これは、アプリケーションが必要以上の作業を行うことを意味するためです。 (つまり、アプリが高速になります)。

70
Jacob

これは、仕事に適したツールを選択することです。コレクションの使用方法によって異なります。

このページ には、さまざまなコレクションクラスの違いを詳しく説明した表があります。

以下は、あなたが尋ねているコレクションに関するそのテーブルからの抜粋です。

コレクションは連続ストレージを注文しますか?直接アクセス?ルックアップの効率性効率性の操作]
43
Zar Shardan

HashSetSortedSetの両方が、一意の要素を保持するデータ構造であるデータ構造セットを実装しています。

それらの主な違いは、データを格納するために使用する基礎となるデータ構造です。 HashSetはhash-tableを使用しますが、SortedSetはred-black treeを使用します。これは、バランスの取れたバイナリツリーです。

HashSetの複雑さはO(1)であるため、基本的な操作(つまり、追加、削除、検索)はSortedSetよりも高速です。 SortedSetの複雑さはlog(N)であるが一定の期間の入力データのサイズは、入力のサイズに依存することを意味します。たとえば、入力データのサイズが1,000の場合、プログラムは基本操作を10ステップで実行し、1,000,000の場合、プログラムは基本操作を20ステップで実行します。

結論:HashSetを使用します要素を並べ替える必要がない場合それ以外の場合は、SortedHashを使用します。これは、ソートが必要でない限り、HashSetの使用が優先であることを意味します。

4