2

私はリストに代わるより速い方法を見つけるために研究してきました。アルゴリズムの本でhashtableは、別のチェーンを使用すると最速のようです。それから、Javaには実装がhashtableあり、私が読んだことから、別のチェーンを使用しているように見えることがわかりました。ただし、同期のオーバーヘッドがあるため、 の実装がhashmapのより高速な代替手段として提案されていhashtableます。

私の質問は次のとおりです。

  • javahashmapは、挿入/削除/検索するために Java で実装された最速のデータ構造ですか?
  • 読んでいる間、いくつかの投稿で のメモリ使用量について懸念がありました hashmap。ある投稿では、空がhashmap300 バイトを占めると述べています。hashtableよりもメモリ効率が高いhasmapですか?
  • また、hashそれぞれの機能は最も効率的です stringsか?
4

6 に答える 6

1

問題があることを測定するまでは、最も単純なオプションを使用し、パフォーマンスについて心配する必要はありません.

javaハッシュマップは、挿入/削除/検索するためにJavaで実装された最速のデータ構造ですか?

ArrayList は、必要に応じて HashMap よりも大幅に高速です。オブジェクトを使用する必要があるときにマップを使用する人を見てきました。この場合、カスタム クラス インスタンスは 10 倍速く、小さくすることができます。

読んでいる間、いくつかの投稿でハッシュマップのメモリ使用量について懸念がありました。ある投稿では、空のハッシュマップが 300 バイトを占めると述べています。

300 バイト (まばたきするために支払われる最低賃金よりも安い) が重要であることを知らない限り、私はそうではないと思います。

hashtable は hasmap よりメモリ効率が良いですか?

それは問題になる可能性がありますが、十分ではありません。デフォルトでは、Hashtable は小さいサイズで開始されます。小さい容量の HashMap を作成すると、サイズが小さくなります。

また、それぞれのハッシュ関数は文字列に対して最も効率的ですか?

一般的なケースでは、十分に効率的です。まれに、たとえばサービス拒否攻撃を防ぐために戦略を変更したい場合があります。メモリ効率とパフォーマンスを本当に気にしているなら、そもそも String を使うべきではないでしょう。

于 2014-01-13T19:11:39.493 に答える
0

ご指摘のとおり、Hashtable は完全に同期されているため、環境によって異なります。多くのスレッドがある場合は、 ConcurrentHashMap がより良い解決策になります。ただし、 Trove4Jを見ることはできます- おそらくそれはあなたのニーズにより適しているでしょう。Trove は、ハッシュテーブルに似た連鎖ハッシュを使用します

于 2014-01-13T18:18:51.417 に答える