0

いくつかの単語とその出現時刻を Web サイトに保存したいのですが、どの構造を使用すればよいかわかりません。

構造に単語を追加するたびに、最初に単語が既に存在するかどうかを確認し、存在する場合は出現回数に 1 を加えた値をチェックし、そうでない場合はその単語を構造に追加します。したがって、この構造を使用すると、要素を非常に高速に見つけることができます。ハッシュテーブルまたはハッシュマップを使用する必要があると思いますよね?

また、ソートされたリストを取得したいので、構造を短時間でランク付けできます。

言い忘れましたが、私はJavaを使って書いています。

みんなありがとう!:)

4

5 に答える 5

2

HashMapはあなたにぴったりのようです。スレッドセーフなオプションが必要な場合は、ConcurrentHashMapを使用してください。

例えば:

Map<String, Integer> wordOccurenceMap = new HashMap<>();

TreeMap保証された O(log n) ルックアップ時間 (および挿入など) をHashMap提供しますが、ハッシュ コードがキーを適切に分散させる場合、O(1) ルックアップ時間を提供します。エントリをソートする必要がない限り、私はそのまま使用しHashMapます。」- TreeMap または HashMapでの Jon Skeet の回答の一部。

于 2013-07-16T06:58:54.040 に答える
1

並べ替え機能と単語のカウントの両方が必要な場合は、TreeMap がより良いソリューションです。カスタム トライを使用すると効率が向上しますが、単語を変更する場合を除き、必須ではありません。

于 2013-07-16T06:59:59.510 に答える
1

word をキー、counter を値としてハッシュマップを定義します。

Map<String,Integer> wordsCountMap = new HashMap<String,Integer>();

次に、次のようなロジックを追加します。

  • 単語を取得したら、containsKeyメソッドを使用してマップで確認します
  • key(word) が見つかった場合は、getを使用して値を取得し、値をインクリメントします
  • key(word) が見つからない場合は、thw word をキーとして値を追加し、count 1 を値として入れます
于 2013-07-16T07:00:07.450 に答える
0

したがって、HashMap を使用できますが、マルチスレッドについて忘れないでください。このデータ構造は、いくつかのスレッドを介してアクセスできますか? また、データにいくつかの階層がある場合 (たとえば、ラクニングの場合と時間でソートする場合) には、3 つのマップを使用できます。また、グーグルのグアバコレクションを調べることもできます。おそらく、それらはあなたにとってより安定するでしょう。

于 2013-07-16T07:04:31.613 に答える