【问题标题】:Recursion making explorer slow递归使资源管理器变慢
【发布时间】:2015-08-05 19:44:45
【问题描述】:

这个检查 mp3 歌曲的代码(使用递归)使我的资源管理器非常慢 请给我建议一种让它更快的方法

public static boolean getMp3s1(File dir){
            int h=0;
             File[] listFile = dir.listFiles();
             if(listFile!=null)
             for( int i=0; i< listFile.length; i++)
             {
                 if(listFile[i].isDirectory()==true)
                 getMp3s1(listFile[i]);
                 else
                 {
                     if(listFile[i].getName().endsWith(".mp3")==true||listFile[i].getName().endsWith(".MP3")==true)
                         h=1;
            }

          }
         if(h==1){
             h=0;
             return true;
        }
         else
             return false;

        }

【问题讨论】:

  • stackoverflow.com/questions/9530921/…。希望这会对你有所帮助。
  • 每当调用一个方法时,它会将调用之前的所有代码放入堆栈中,将函数内部的代码执行,完成后将原始代码从堆栈中取出并执行。这在递归中一遍又一遍地发生,并且创建多个堆栈,调用次数越多程序变得越慢因此您可以在无限 for 循环中执行相同操作,该循环仅在中断时退出并且仍然更有效
  • @PraveenKumar Bro 我要求解决递归问题。你提到的代码是获取所有文件和文件夹......我的代码是检查文件夹及其子文件夹是否包含 mp3文件与否。这就是为什么我需要使用递归,这让我的应用程序变慢了............仍然非常感谢您的回复
  • @WisdmLabs 你能举出任何用 for 循环来实现这个的例子吗?因为我不能用 for 循环来做到这一点......
  • 你可以尝试这样的事情,但它在 java 中,所以你必须做一些改变stackoverflow.com/questions/3154488/…

标签: android recursion


【解决方案1】:

尝试在 h=1 之后中断循环;它可以加快一点。 像下面这样:

public static boolean getMp3s1(File dir){
        int h=0;
         File[] listFile = dir.listFiles();
         if(listFile!=null)
         for( int i=0; i< listFile.length; i++)
         {
             if(listFile[i].isDirectory()==true)
             getMp3s1(listFile[i]);
             else
             {
                 if(listFile[i].getName().endsWith(".mp3")==true||listFile[i].getName().endsWith(".MP3")==true)
                    {
                      h=1;
                     break;
                    }
        }

      }
     if(h==1){
         h=0;
         return true;
    }
     else
         return false;

    }

编辑: 正如我从您的代码逻辑中看到的那样,您似乎可以跳过 getMp3s1(listFile[i]);也是。

【讨论】:

  • 是的,你的仪式:)。但它仍然很慢..对不起,我不能支持你的答案,因为我的回购小于 15 :(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-22
  • 2021-11-09
  • 2019-04-15
  • 2022-12-04
  • 1970-01-01
  • 2014-11-05
  • 1970-01-01
相关资源
最近更新 更多