私はcsvファイルから情報を読み込むことを含む単純なJavaアプリケーションを構築しています。 csvファイル内の情報は、このフォームで来る:2つの大きなテキストファイルをJavaでソートする最良の方法は何ですか?
"ID","Description"
"AB","Some sort of information for AB"
"AC","Some sort of information for AC"
私は、ユーザーがIDでソートコンソールでは、説明、ID、またはその両方をプリントアウトできるように必要なのです。最も簡単な解決策は、ファイルをopencsvなどのCSVライブラリで解析し、これらの文字列をTreeMapに入れて、TreeMapの内容を出力することです。 TreeMapのキーはIDになり、値は説明になります。
しかし、CSVファイルが巨大になる可能性があります。これは5 GBで、5 GBの文字列をTreeMapにロードすると、メモリ不足のエラーが発生します。大きなファイルを処理するには、外部のマージソートを使用してファイルをソートできます。いったんソートされたファイルを取得すると、単にファイルを読むだけで、ファイルの内容をコンソールに出力できます。
外部マージソートは、ファイルの内容をTreeMapにロードするよりもずっと遅くなります。私はファイルサイズを検出することを検討しています。ファイルサイズが使用可能なメモリを超えている場合は、外部のマージソートを使用します。それ以外の場合は、ファイルの内容をTreeMapにロードします。
しかし、これは、2つの異なるソートを実行する2つの別々のコードブロックが存在することを意味します。したがって、維持する必要があるコードの量を増やしてください。このアプリケーションを書くなら、小さなcsvファイルと大きなcsvファイルを扱う2つの分離コードコードを書くことを検討しますか?または、ファイルのサイズにかかわらず外部マージソートを使用してファイルを並べ替えるだけですか?
この方法に代わる方法はありますか?
ありがとうございます。
これは議論と複数の有効な提案につながるかもしれない設計上の質問です。 http://programmers.stackexchange.comの方が適しているかもしれません。私はここで "建設的ではない"と票決しました。 –
@DuncanJonesこんにちは、私はこれをプログラマに移行して嬉しく思います.stackexchange.com。一度私はそれを行う方法を見つけた – zfranciscus
@DuncanJones私はスタックオーバフローで824の評判を持っていますが、私はプログラマ.stackexchange.comで113の評判しか持っていません。これが私がプログラマーにこの質問を移行することができない理由です.stackexchange.com – zfranciscus