今天在java方面的书籍,说到路径匹配,**多级匹配,*匹配任意字符串,就想通过自己的方式来写一个demo,能不能也实现这样的功能,那么看人家的源码 我像就应该比较好理解些。
下面贴上代码.
public void getFiles(String parentName,int count,List<File> fileList){ File file=new File(parentName); if(file.isDirectory()){ File [] childFile=file.listFiles(filter()); for(File child:childFile){ getFiles(child.getAbsolutePath(),count,fileList); } }else{ ++count; fileList.add(file); } } public FileFilter filter(){ return new FileFilter() { public boolean accept(File pathname) { if(pathname.getAbsolutePath().indexOf("jar")!=-1){ return true; } return false; } }; }
在做测试的时候:
int count=0; List<File> fileList=new ArrayList<File>(); new NetTest().getFiles("C:/eams/file",count,fileList); for(File file:fileList){ System.out.println(file.getAbsolutePath()+"\t"+file.getName()); } System.out.println(count);
输出和我想的有些不同:
count 一直为 0 。
fileList 是有值得。
描述到这里,问题就来了,
对于int 和 List(集合) 在存储的时候是如何实现的?(一直想了解底层,不想当一辈子码农)
自己也找了一些资料在看,但是都讲的不清不楚。所以求有人给详细解释下。
int哪有底层,它只是一个数据类型而已,二进制10101这种机器码,除非它的包转类Integer,提供了一些方法,至于List只是一个接口,它有许多实现,常用的就是ArrayList,linkedlist,你可以百度一下他们的区别,一个数组存储,一个链表存储
我看了arrayList的底层四线,大部分的底层方法是navite的,这些方法基于jni,使用c/c++来写的 ,我在想链表添加操作的时候是把内存地址传进了,,而int类型,只是把值穿进去,没有传地址进去,因为刚开始学习c的时候,做值得交换必须要传地址或者引用才能进行值得交换(表象),
int是基本数据类型,你可以理解成是最小单位,存储在栈内存或者说是非堆内存,不定时回收。
List是对象,你可以理解成是一种聚合单位,存储在堆内存,由GC回收。
实现原理的话,int我们不会去考虑。List的话可以分别考察下ArrayList和LinkedList的原理。