1

早速質問させていただきました。私は学校のプロジェクトに取り組んでおり、非常に大きなテキスト ファイルを解析する必要があります。これはデータベース クラス用です。アクターは mysql データベースの主キーになるため、ファイルから一意のアクター名を取得する必要があります。私はすでにパーサーを作成しており、うまく機能していますが、その時点で重複を削除するのを忘れていました。そこで、アクターの配列リストを作成するのが最も簡単な方法だと判断しました。(ArrayList ADT を使用) 次に、contain() メソッドを使用して、新しいテキスト ファイルに出力する前に、アクター名が arraylist にあるかどうかを確認します。そうでない場合は、それを arraylist に追加してページに出力します。現在、プログラムの実行速度は非常に遅いです。arraylist の前に、約 5 分かかりました。古いアクター ファイルは、重複を削除せずに 180k でした。現在、30分間実行されており、これまでのところ12kです。

ファイル内のアクターの数がわからないため、arraylist のサイズを空白のままにしましたが、少なくとも 100 万から 200 万です。そのサイズに500万を入れて、後ですべて取得できるかどうかを確認することを考えていました。(最後のarraylistインデックスを確認するだけで、空の場合はスペースが不足しませんでした。)arraylistが常に再倍増してすべてを再コピーしていないため、これにより時間が短縮されますか?これよりも高速な別の方法はありますか?また、完了する前にコンピューターのメモリが不足するのではないかと心配しています。どんなアドバイスも素晴らしいでしょう。

(また、テキスト ファイルに対して 'unique' コマンドを実行しようとしましたが、成功しませんでした。アクター名は 1 行に 1 つずつ出力されます。(1 つの列に) コマンドが間違っているのではないかと考えていました。テキスト ファイルの列から重複を削除するにはどうすればよいでしょうか。 Windows または Linux のコマンド プロンプトで?) ありがとうございます。長い投稿で申し訳ありません。明日は中間試験があり、ストレスを感じ始めています。

4

3 に答える 3

2

arrayList contains() を使用したルックアップのコストにより、おおよそ O(n) のパフォーマンスが得られます。これを何百万回も実行すると、プログラムが殺されると思います。

Set の HashSet 実装を使用します。理論的には一定時間のルックアップが可能になり、重複を自動的に削除します。

于 2013-04-08T07:52:32.073 に答える