线程花了很长时间。为什么?

时间:2012-04-29 07:45:11

标签: android

我正在创建应用以检查我的SD卡中的重复文件 我在“文件”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
        }

    }
}

2 个答案:

答案 0 :(得分:2)

您可以考虑将所有元素添加到HashSet并将其添加回ArrayList。像

这样的东西
Set<File> set = new HashSet<File>();
set.addAll(files);
files.clear();
files.addAll(set);

现在,如果你比较setfiles的大小,你知道你是否有重复

编辑
根据建议将HashSet更改为Set<File>

答案 1 :(得分:0)

实际上,创建一个帖子非常昂贵,结帐Painless Threading

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

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

  • 缓存files.size()一次,将其存储在变量中并使用它;
  • new File(files.get(i)).getName()不需要为每个j调用,可以缓存;
  • 尽量避免在循环内调用new。我不确定您为什么需要拨打new File()而不是仅仅比较files.get()结果;