gpt4 book ai didi

java - 程序由于递归而变慢

转载 作者:行者123 更新时间:2023-12-01 06:32:50 25 4
gpt4 key购买 nike

我正在尝试编写一个程序,将 C: 驱动器上的每个文件和文件夹名称添加到 ArrayList。该代码工作正常,但由于大量的递归,它变得非常慢。这是代码:

public static void updateFileDataBase()
{
ArrayList<String> currentFiles = new ArrayList<String>();
addEverythingUnder("C:/",currentFiles,new String[]{"SteamApps","AppData"});
for(String name : currentFiles)
System.out.println(name);
}
private static void addEverythingUnder(String path, ArrayList<String> list, String[] exceptions)
{
System.gc();
System.out.println("searching " + path);
File search = new File(path);
try
{
for(int i = 0; i < search.list().length; i++)
{
boolean include = true;
for(String exception : exceptions)
if(search.list()[i].contains(exception))
include = false;
if(include)
{
list.add(search.list()[i]);
if(new File(path + "/" + search.list()[i]).isDirectory())
{
addEverythingUnder(path + "/" + search.list()[i],list,exceptions);
}
}
}
}
catch(Exception error)
{
System.out.println("ACCESS DENIED");
}
}

我想知道是否可以采取任何措施来加快这一过程。预先感谢:)

最佳答案

Program slowing down due to recursion

不,不是。递归不会让事情变慢。糟糕的算法和糟糕的编码会让事情变慢。

例如,您正在为您处理的每个文件调用Files.list()四次以及 每个目录一次。您可以通过对每个目录执行一次来节省 O(N):

   for(File file : search.listFiles())
{
String name = file.getName();
boolean include = true;
for(String exception : exceptions)
if(name.contains(exception))
include = false;
if(include)
{
list.add(name);
if(file.isDirectory())
{
addEverythingUnder(file,list,exceptions);
}
}
}

关于java - 程序由于递归而变慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16578712/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com