我正在创建应用以检查我的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
}
}
}
答案 0 :(得分:2)
您可以考虑将所有元素添加到HashSet
并将其添加回ArrayList
。像
Set<File> set = new HashSet<File>();
set.addAll(files);
files.clear();
files.addAll(set);
现在,如果你比较set
和files
的大小,你知道你是否有重复
编辑
根据建议将HashSet
更改为Set<File>
答案 1 :(得分:0)
实际上,创建一个帖子非常昂贵,结帐Painless Threading
如果你经常创建相同的线程 - AsyncTask可能是一个不错的选择,因为它会以适当的方式管理线程创建/停止。
以下是针对呈现代码的一些调整:
files.size()
一次,将其存储在变量中并使用它; new File(files.get(i)).getName()
不需要为每个j调用,可以缓存; new
。我不确定您为什么需要拨打new File()
而不是仅仅比较files.get()
结果;