[解決済み】ハッシュセットとツリーセットの比較
2022-03-23 20:22:45
質問
昔から木が好きなんです。
O(n*log(n))
と整頓されているのが特徴です。しかし、私がこれまで知っているすべてのソフトウェアエンジニアは、なぜ私が
TreeSet
. CS出身者としては、どちらを使うかはそれほど重要ではないと思うし、ハッシュ関数やバケット(の場合)をいじくり回すのも気にならない。
Java
).
どのような場合に
HashSet
の上に
TreeSet
?
解決方法は?
HashSet は TreeSet よりもはるかに高速ですが(add, remove, contains などのほとんどの操作でログタイムに対して定数時間)、TreeSet のように順序を保証するものではありません。
ハッシュセット
- は、基本的な操作(add、remove、contains、size)に対して一定時間のパフォーマンスを提供します。
- 要素の順序が時間経過とともに一定になることを保証するものではありません。
-
反復処理の性能は
初期容量
と
負荷率
をHashSetの
- デフォルトの負荷率を受け入れても問題ありませんが、セットが大きくなると予想されるサイズの約2倍の初期容量を指定するとよいでしょう。
ツリーセット
- 基本操作(add, remove, contains)に対してlog(n)の時間コストを保証します。
-
は、セットの要素が(昇順、自然、またはコンストラクタで指定したもの)ソートされることを保証します(implements
SortedSet
) - は、反復処理のパフォーマンスに関するチューニング・パラメータを提供していません。
-
のような順序付きセットを処理するためのいくつかの便利なメソッドを提供しています。
first()
,last()
,headSet()
およびtailSet()
その他
重要なポイント
- どちらも重複のない要素集を保証する
- 一般に、HashSetに要素を追加してからコレクションをTreeSetに変換して、重複のないソートされたトラバーサルを行う方が速いです。
- これらの実装はいずれも同期化されていません。つまり、複数のスレッドが同時に集合にアクセスし、そのうちの少なくとも1つのスレッドが集合を変更する場合、外部から同期させる必要があります。
-
リンクドハッシュセット
は、ある意味で
HashSet
とTreeSet
. しかし、リンクリストが通っているハッシュテーブルとして実装されています。 挿入順反復を提供し、TreeSet が保証するソートされたトラバーサルとは異なります。 .
このように、使い方の選択はニーズによって異なりますが、順序付きコレクションが必要な場合でも、HashSetでSetを作成し、それをTreeSetに変換した方が良いと思います。
-
例
SortedSet<String> s = new TreeSet<String>(hashSet);
関連
-
[解決済み] 一部の入力ファイルが非推奨のAPIを使用またはオーバーライドしている
-
[解決済み] Javaでのスキャナが動作しない
-
[解決済み] ORA-01654: インデックスを拡張できません。
-
[解決済み] ファイルを作成せずに、ファイルが存在するかどうかをチェックする
-
[解決済み] 午前0時からの時間を秒単位で取得する方法
-
[解決済み] ヘッドリカーシオンとテールリカーシオンの違い [重複]について
-
[解決済み] HashSetの値を構造的に初期化する方法は?
-
[解決済み] 定義 HashSetとは何ですか?
-
[解決済み] C#でHashSetに相当するAddRangeはありますか?
-
[解決済み] HashSetとLinkedHashSetの比較
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Firebase クラスにシリアライズするプロパティが見つからない
-
[解決済み] Java の substring() の時間複雑性
-
[解決済み] Java UnknownFormatConversionException
-
[解決済み] 型の不一致:ArrayListからListへの変換ができない
-
[解決済み] JDBC タイプの方言マッピングがありません。1111
-
[解決済み] java.lang.ClassCastException: java.lang.Long を java.lang.Integer にキャストできない(java 1.6
-
[解決済み] IntegerからBigIntegerへの変換
-
[解決済み] x--やx++はここで何をするのですか?
-
[解決済み】HashMap、LinkedHashMap、TreeMapの違いについて
-
[解決済み] どのJavaコレクションを使うべきですか?