3

これを実装したいのですが、.txtファイルを読み取ってから、別の.txtファイルで大きな文字から小さな文字に変換します。次に、最も一般的な文字や単語を見つけるためにそれらを数える必要があります。私の質問は、そのためにどのようなテーブルを使用する必要があるかです。ハッシュまたはマップテーブルを使用する必要がありますか?.txtファイルには約5000000文字の単語の文があります。比較、カウント、および大きなファイルの変換を保存して高速に取得できるようにする場合は、どのテーブルを使用する必要がありますか。私はハッシュテーブルを持っています

    HashMap<String, String> hm = new HashMap<String, String>();

または私は他の方法でそれを行う必要がありますか?または、リンクリストを使用する必要がありますか?文や単語にどのように実装できますか?

4

4 に答える 4

1

文字を数えたい場合は、Map<Character, Long>またはMap<Character, BigInteger>より適しているようです。具体的な実装はそれほど重要ではありません。文字のセットが定義され、縮小されている場合 (ラテン アルファベットなど)、 を使用することもできますBigInteger[]。各文字は、配列内の順序で簡単に置き換えることができます。

これらの数値の文または単語については、カウントする各値の行を使用して、データベース アプローチを使用します。

更新: データ構造を持つ単語や文の代替アプローチは、ツリーを使用することです。rood ノードは空の単語です。ルートから「dad」が見つかった場合、子「d」、その孫「a」、およびその孫「d」が得られます。この時点で、最後のノードのポインタに 1 を追加します (もちろん、いずれかのノードが欠落している場合は、それらを作成する必要があります)。

于 2012-10-11T18:59:58.440 に答える
1

Map要件ごとに が必要になります。文の場合:

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

言葉については、同じ:

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

最後に、文字については、次を使用します。

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

HashMapこれらのマップ内で多くの検索を行うため、使用する実装にする必要がありMapます。カウント プロセスは複数のスレッドに適しているためMap、そのアプローチを決定する場合は、スレッド セーフが必要になる場合があります。

于 2012-10-11T20:03:39.883 に答える
0

データベースアプローチを使用でき、mapを使用して挿入または更新カウントメソッドを処理できることをお勧めします。

Map<String, boolean>

また、バッチ処理を使用して、一度に複数のクエリを処理できます。

于 2012-10-11T19:08:59.417 に答える