0

SD カード内の重複ファイルをチェックするアプリを作成しています。
"files" でファイルリスト全体を取得しますArrayList
重複ファイルを見つける必要があるため、スレッドでこのコードを使用しました。
しかし、機能していますが、重複を見つけるのに時間がかかりすぎます。

for(int i=0;i<files.size();i++)
    {
      for(int j=i+1;j<files.size();j++)
        {
        if(new File(files.get(i)).getName().compareTo(new File(files.get(j)).getName())==0)
        {
            //My Code
        }

    }
}
4

2 に答える 2

2

すべての要素をにHashSet追加し、それらをに戻すことを検討できArrayListます。何かのようなもの

Set<File> set = new HashSet<File>();
set.addAll(files);
files.clear();
files.addAll(set);

とのサイズを比較するsetfiles、重複しているかどうかがわかります

編集 は提案どおりに
変更HashSetされましたSet<File>

于 2012-04-29T07:49:52.697 に答える
0

実際、スレッドの作成にはかなりの費用がかかります。痛みのないスレッドをチェックアウトしてください。

同じスレッドを頻繁に作成する場合-AsyncTaskは、スレッドの作成/停止を適切に管理するため、適切な選択となる可能性があります。

提示されたコードの微調整は次のとおりです。

  • files.size()一度キャッシュし、それを変数に保存して使用します。
  • new File(files.get(i)).getName()jごとに呼び出す必要はなく、キャッシュできます。
  • newループ内の呼び出しは避けてください。結果new File()を比較するだけでなく、なぜ電話をかける必要があるのか​​わかりません。files.get()
于 2012-04-29T07:57:28.267 に答える