TreeMapかHashMapか?[重複あり]
質問
ハッシュマップとツリーマップの使い分けは?
要素をソートする必要があるときに、TreeMapを使用して反復処理できることは知っています。 しかし、それだけでしょうか?私はちょうどマップを参照したいとき、またはいくつかの最適な特定の用途の最適化はありません?
どのように解決するのですか?
ハッシュテーブルは(通常)、以下の複雑さの範囲内で検索操作(ルックアップ)を行います。
O(n)<=T(n)<=O(1)
であり、平均的な場合の複雑さは
O(1 + n/k)
しかし、バイナリサーチツリー(BST)では、検索操作(ルックアップ)は
O(n)<=T(n)<=O(log_2(n))
であり、平均的な場合の複雑さは
O(log_2(n))
. それぞれの(そしてすべての)データ構造の実装は、利点、欠点、操作の時間の複雑さ、コードの複雑さを理解するために、(あなたによって)知っている必要があります。
例えば、ハッシュテーブルのエントリの数は、しばしば衝突のリストを持ついくつかの固定数(その一部は全く埋められないかもしれません)を持っています。一方、ツリーは通常、ノードあたり 2 つのポインタ (参照) を持ちますが、実装がノードあたり 2 つ以上の子ノードを許可すれば、これはもっと多くなり、これによってノードが追加されるとツリーは成長しますが、重複を許可しない場合があります。(JavaのTreeMapのデフォルトの実装は、重複を許しません)
例えば、特定のデータ構造の要素数が際限なく増加したり、データ構造の基礎となる部分の限界に近づいた場合はどうでしょうか。何らかのリバランスやクリーンアップ操作を実行する償却操作についてはどうでしょうか。
例えば、ハッシュテーブルでは、テーブルの要素数が十分に大きくなると、任意の数の衝突が発生する可能性があります。一方、木は通常、挿入(または削除)後に再バランス処理を行う必要があります。
キャッシュのようなもの(例:要素数が決まっている、サイズがわかっている)であれば、ハッシュテーブルが最適でしょうが、辞書のようなもの(例:一度登録すると何度も調べる)であれば、ツリーを使うことになるでしょうね。
ただし、これはあくまで一般的なケースです(情報が与えられていない)。どのデータ構造を使うか、正しい選択をするためには、どのような処理がどのように行われるかを理解する必要があります。
マルチマップ(範囲検索)やコレクションのソート・フラット化が必要な場合、ハッシュテーブルではだめなんだ。
関連
-
Eclipseは、ポップアップA Java Exception has occurred.を実行し、エラーException in threadの解決策を報告します。
-
[解決済み] Spring Data JPAにおけるCrudRepositoryとJpaRepositoryのインターフェースの違いは何ですか?
-
[解決済み] Java enumのメンバーを比較する:==またはequals()?
-
Junitのユニットテストはjava.lang.Testを報告します。
-
BindException: アドレスはすでに使用中です:バインドエラー解決
-
git pull appears現在のブランチに対するトラッキング情報がありません。
-
CAS 5.1.8でhttpをサポートし、認証されていない認可サービスエラーのプロンプトが表示される問題を解決した。
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] 整数の平方根が整数であるかどうかを判断する最速の方法
-
[解決済み】HashMap、LinkedHashMap、TreeMapの違いについて
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
NullPointerException - java.lang.
-
プロジェクトの依存関係を解決できない。
-
JAVA_HOME環境変数が正しく定義されていない問題を解決する
-
名前 'XXX' を持つ Bean の作成に失敗しました。自動依存関係の注入に失敗しました 解決方法
-
Java Notes 005_この行に複数のマーカーがある - キーを変数に解決できない - シンタックスエラー、ins
-
JDK8 の Optional.of と Optional.ofNullable メソッドの違いと使い方を説明する。
-
Javaがエラーで実行される、選択が起動できない、最近起動したものがない
-
git pull appears現在のブランチに対するトラッキング情報がありません。
-
[解決済み] HashMapとTreeMapの違いは何ですか?[重複あり]
-
[解決済み】HashMap、LinkedHashMap、TreeMapの違いについて