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

您可以考虑将所有元素添加到 aHashSet并将它们添加回ArrayList. 就像是

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

现在,如果您比较 and 的大小setfiles您就知道是否有重复项

编辑
更改HashSetSet<File>建议

于 2012-04-29T07:49:52.697 回答
0

实际上,创建线程非常昂贵,请查看 Painless Threading

如果您经常创建相同的线程 - AsyncTask 可能是一个不错的选择,因为它会以一种很好的方式为您管理线程创建/停止。

以下是对呈现代码的一些调整:

  • 缓存files.size()一次,将其存储在变量中并使用它;
  • new File(files.get(i)).getName()不需要每j调用一次,可以缓存;
  • 尽量避免new在循环内调用。我不确定你为什么需要打电话new File()而不是仅仅比较files.get()结果;
于 2012-04-29T07:57:28.267 回答