关于递归函数中最近出现的一些问题自省详解编程语言
编程语言 问题 详解 关于 出现 一些 最近 递归函数
2023-06-13 09:11:48 时间
// TODO Auto-generated method stub
//这个练习是我自己想出来的,主要存在的问题是在递归函数中
//new新的对象,如果函数不断进栈,就会不断的new新的对象
//最后导致栈内存溢出,并且在进行file对象判断的时候没有使用过滤器
//对对象进行判断,有可能导致添加了其他的文件
File file = new File("C://Users//zx//Desktop//src//java//awt");
List File L1 = GetFileEndWithJava(file);
System.out.println(L1.size());
for (File file2 : L1) {
System.out.println(file2.getName());
public static List File GetFileEndWithJava(File dir) {
List File list = new ArrayList ();
if (dir.isFile())
list.add(dir);
else {
File[] FA = dir.listFiles(new JavaFileFilter());
for (File file_in : FA) {
if (file_in.isFile())
list.add(file_in);
else
list.addAll(GetFileEndWithJava(file_in));
return list;
class JavaFileFilter implements FileFilter {
@Override
public boolean accept(File dir) {
// TODO Auto-generated method stub
// 过滤器设计思想,只保留文件夹以及后缀名是java的文件
if (dir.isDirectory())
return true;
else
return dir.getName().endsWith("java");
package cn.haiyisoft18; import java.io.*; import java.util.ArrayList; import java.util.List; public class IO_FILEPRACTICE2 { public static void main(String[] args) { // TODO Auto-generated method stub File file = new File("C://Users//zx//Workspaces//MyEclipse 10//zx_project"); List File list = new ArrayList (); FileFilter filter = new JavaFilefilter2(".java"); GetJavaFile(list, file, filter); System.out.println(list.size()); for (File file2 : list) { System.out.println(file2.getName()); public static void GetJavaFile(List File list, File dir, FileFilter filter) { if (dir.isFile() filter.accept(dir)) list.add(dir); else { File[] F1 = dir.listFiles(); for (File file_in : F1) { if (file_in.isDirectory()) GetJavaFile(list, file_in, filter); else { if (filter.accept(file_in)) list.add(file_in); class JavaFilefilter2 implements FileFilter { private String suffxx; public JavaFilefilter2(String suffxx) { this.suffxx = suffxx; @Override public boolean accept(File pathname) { // TODO Auto-generated method stub return pathname.getName().endsWith(suffxx); }
package cn.haiyisoft18; import java.io.*; import java.util.ArrayList; import java.util.List; public class IO_FILEPRACTICE3 { public static void main(String[] args) { // TODO Auto-generated method stub File file = new File("C://Users//zx//Desktop//src"); List File list = new ArrayList File FileFilter filter = new JavaFilefilter3(".java"); GetJavaFile(list, filter, file); System.out.println(list.size()); for (File file2 : list) { System.out.println(file2.getName()); public static void GetJavaFile(List File list, FileFilter filter, File dir) { if (dir.isFile() filter.accept(dir)) list.add(dir); else { File[] FL = dir.listFiles(filter); for (File file_in : FL) { if (file_in.isDirectory()) GetJavaFile(list, filter, file_in); else list.add(file_in); class JavaFilefilter3 implements FileFilter { private String suffxx; public JavaFilefilter3(String suffxx) { super(); this.suffxx = suffxx; @Override public boolean accept(File file) { // TODO Auto-generated method stub if (file.isDirectory()) return true; else return file.getName().endsWith(suffxx); }
这是在看毕向东视频的IO视频的时候写的三段代码,代码的主要用途是获取某文件夹及其子文件夹内后缀为suffxx的文件(后缀的英文单词写错了……),其中用到了递归函数,第一个代码是我自己写的,其中有若干问题,例如判断最开始File对象为文件时没有加判断是否为suffxx结尾的文件,会把其他文件带入到List中,但是最大的问题是在递归函数中new了ArrayList对象,以及Filefilter对象,有递归函数是不断的进栈,这样就会不断的new新的对象,最终可能导致内存溢出,所以在使用递归函数时,尽量不要在函数内new对象,应将外面的对象传入函数。
第二个代码是毕向东的代码,不多说了。
第三个代码是我将我第一个代码和第二个代码结合了一下,主要修改了new对象的部分以及过滤器的使用位置,将需要使用的对象由外部传入,减少了函数递归时不断进栈new对象的问题,我将过滤器直接传入了ListFiles()函数,这样ListFiles返回的FIle数组的长度就会变小,减少了内存的占用和循环的次数。
17687.html
cjava相关文章
- java 鸡兔同笼问题详解编程语言
- js文件中使用el表达式问题详解编程语言
- java.util.ConcurrentModificationException 异常问题详解编程语言
- 笔试题之三:C++ dynamic_cast问题详解编程语言
- 解决js中传值,Action获取是乱码问题详解编程语言
- 不一定能写出来的求素数问题详解编程语言
- Hibernate面试常见的12个问题及答案详解编程语言
- 探讨PHP弱类型安全问题总结详解编程语言
- jsp中的日期处理问题详解编程语言
- java.lang.ClassNotFoundException:org.springframework.web.context.ContextLoaderListener问题解决详解编程语言
- 关于字符串比较时候出现的空指针问题的坑详解编程语言
- CSS 属性设置优先级问题详解编程语言
- SSH框架问题——java.lang.NoClassDefFoundError: org/springframework/dao/support/PersistenceExceptionTransla详解编程语言
- 关于成员变量和局部变量是否都会被默认初始化的问题详解编程语言
- ABAP-JCO服务端连接问题详解编程语言
- jquey写进度条问题详解编程语言
- php addslashes 需要注意的问题详解编程语言
- [问题解决]ALV标准过滤功能失效详解编程语言
- [问题解决]使用mpur_message_forced时,校验消息添加到错误的采购订单行项目上详解编程语言
- Django使用jsonp和cors解决跨域请求问题详解编程语言
- ProxyFactory的一个问题详解编程语言