锁定老帖子 主题:一道java英文试题
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2014-01-25
The program need scan a given directory and all its children recursively, and find out the top 10 biggest files. Non-Functional Requirement: Please use OO design, TDD, design patterns etc. Take care about code style as well. 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2014-01-26
import java.io.File; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; public class Top10BiggestFiles { private List<File> top10Files = new ArrayList<File>();//实际的最大文件列表 public List<File> getTop10Files() { return top10Files; } //递归调用获得一个目录下前10最大文件的 public void findTop10BiggestFiles(String parentFile){ File dir = new File(parentFile); File[] files = dir.listFiles(); if(files==null){ return; } for(File file:files){ if(file.isDirectory()){ findTop10BiggestFiles(file.getAbsolutePath()); }else{ top10Files.add(file); //逆序排序,按照文件的大小从大到小排序 Collections.sort(top10Files,new Comparator<File>() { @Override public int compare(File o1, File o2) { if(o1.length()>o2.length()){ return -1; }else if(o1.length()==o2.length()){ return 0; }else{ return 1; } } }); } } int fileSize = top10Files.size(); //只留下前十的文件 if(fileSize>10){ List<File> fileList = new ArrayList<File>(10); for(int i=0;i<10;i++){ fileList.add(top10Files.get(i)); } top10Files.clear(); top10Files = fileList; } } public static void main(String[] args){ Top10BiggestFiles topFile = new Top10BiggestFiles(); topFile.findTop10BiggestFiles("D:\\awork"); topFile.getTop10Files(); } } |
|
返回顶楼 | |
发表时间:2014-01-26
chen3975 写道 import java.io.File; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; public class Top10BiggestFiles { private List<File> top10Files = new ArrayList<File>();//实际的最大文件列表 public List<File> getTop10Files() { return top10Files; } //递归调用获得一个目录下前10最大文件的 public void findTop10BiggestFiles(String parentFile){ File dir = new File(parentFile); File[] files = dir.listFiles(); if(files==null){ return; } for(File file:files){ if(file.isDirectory()){ findTop10BiggestFiles(file.getAbsolutePath()); }else{ top10Files.add(file); //逆序排序,按照文件的大小从大到小排序 Collections.sort(top10Files,new Comparator<File>() { @Override public int compare(File o1, File o2) { if(o1.length()>o2.length()){ return -1; }else if(o1.length()==o2.length()){ return 0; }else{ return 1; } } }); } } int fileSize = top10Files.size(); //只留下前十的文件 if(fileSize>10){ List<File> fileList = new ArrayList<File>(10); for(int i=0;i<10;i++){ fileList.add(top10Files.get(i)); } top10Files.clear(); top10Files = fileList; } } public static void main(String[] args){ Top10BiggestFiles topFile = new Top10BiggestFiles(); topFile.findTop10BiggestFiles("D:\\awork"); topFile.getTop10Files(); } } Please use OO design, TDD, design patterns etc. |
|
返回顶楼 | |
发表时间:2014-01-26
jerry1985 写道 chen3975 写道 import java.io.File; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; public class Top10BiggestFiles { private List<File> top10Files = new ArrayList<File>();//实际的最大文件列表 public List<File> getTop10Files() { return top10Files; } //递归调用获得一个目录下前10最大文件的 public void findTop10BiggestFiles(String parentFile){ File dir = new File(parentFile); File[] files = dir.listFiles(); if(files==null){ return; } for(File file:files){ if(file.isDirectory()){ findTop10BiggestFiles(file.getAbsolutePath()); }else{ top10Files.add(file); //逆序排序,按照文件的大小从大到小排序 Collections.sort(top10Files,new Comparator<File>() { @Override public int compare(File o1, File o2) { if(o1.length()>o2.length()){ return -1; }else if(o1.length()==o2.length()){ return 0; }else{ return 1; } } }); } } int fileSize = top10Files.size(); //只留下前十的文件 if(fileSize>10){ List<File> fileList = new ArrayList<File>(10); for(int i=0;i<10;i++){ fileList.add(top10Files.get(i)); } top10Files.clear(); top10Files = fileList; } } public static void main(String[] args){ Top10BiggestFiles topFile = new Top10BiggestFiles(); topFile.findTop10BiggestFiles("D:\\awork"); topFile.getTop10Files(); } } Please use OO design, TDD, design patterns etc. 个人建议一次性递归loop所有file到top10Files后,再对top10Files进行sort和top10截取。另外应确认好需求,the top 10 biggest files我们都知道中文含义为前10大文件,那么是只取10个文件吗?请考虑如下情况:当最大文件存在多个文件大小一致情况,还是取10个? |
|
返回顶楼 | |
发表时间:2014-01-27
用堆结构直接解决
|
|
返回顶楼 | |
发表时间:2014-01-27
yuwenchun 写道 jerry1985 写道 chen3975 写道 import java.io.File; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; public class Top10BiggestFiles { private List<File> top10Files = new ArrayList<File>();//实际的最大文件列表 public List<File> getTop10Files() { return top10Files; } //递归调用获得一个目录下前10最大文件的 public void findTop10BiggestFiles(String parentFile){ File dir = new File(parentFile); File[] files = dir.listFiles(); if(files==null){ return; } for(File file:files){ if(file.isDirectory()){ findTop10BiggestFiles(file.getAbsolutePath()); }else{ top10Files.add(file); //逆序排序,按照文件的大小从大到小排序 Collections.sort(top10Files,new Comparator<File>() { @Override public int compare(File o1, File o2) { if(o1.length()>o2.length()){ return -1; }else if(o1.length()==o2.length()){ return 0; }else{ return 1; } } }); } } int fileSize = top10Files.size(); //只留下前十的文件 if(fileSize>10){ List<File> fileList = new ArrayList<File>(10); for(int i=0;i<10;i++){ fileList.add(top10Files.get(i)); } top10Files.clear(); top10Files = fileList; } } public static void main(String[] args){ Top10BiggestFiles topFile = new Top10BiggestFiles(); topFile.findTop10BiggestFiles("D:\\awork"); topFile.getTop10Files(); } } Please use OO design, TDD, design patterns etc. 个人建议一次性递归loop所有file到top10Files后,再对top10Files进行sort和top10截取。另外应确认好需求,the top 10 biggest files我们都知道中文含义为前10大文件,那么是只取10个文件吗?请考虑如下情况:当最大文件存在多个文件大小一致情况,还是取10个? 如果有多个文件大小一致的情况 可以把大小一致的文件列举出来 如:以下是10个最大的文件 文件一 文件二 文件三 ... 其中以下文件大小一致: 文件名 文件名 |
|
返回顶楼 | |
发表时间:2014-01-27
yuwenchun 写道 jerry1985 写道 chen3975 写道 import java.io.File; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; public class Top10BiggestFiles { private List<File> top10Files = new ArrayList<File>();//实际的最大文件列表 public List<File> getTop10Files() { return top10Files; } //递归调用获得一个目录下前10最大文件的 public void findTop10BiggestFiles(String parentFile){ File dir = new File(parentFile); File[] files = dir.listFiles(); if(files==null){ return; } for(File file:files){ if(file.isDirectory()){ findTop10BiggestFiles(file.getAbsolutePath()); }else{ top10Files.add(file); //逆序排序,按照文件的大小从大到小排序 Collections.sort(top10Files,new Comparator<File>() { @Override public int compare(File o1, File o2) { if(o1.length()>o2.length()){ return -1; }else if(o1.length()==o2.length()){ return 0; }else{ return 1; } } }); } } int fileSize = top10Files.size(); //只留下前十的文件 if(fileSize>10){ List<File> fileList = new ArrayList<File>(10); for(int i=0;i<10;i++){ fileList.add(top10Files.get(i)); } top10Files.clear(); top10Files = fileList; } } public static void main(String[] args){ Top10BiggestFiles topFile = new Top10BiggestFiles(); topFile.findTop10BiggestFiles("D:\\awork"); topFile.getTop10Files(); } } Please use OO design, TDD, design patterns etc. 个人建议一次性递归loop所有file到top10Files后,再对top10Files进行sort和top10截取。另外应确认好需求,the top 10 biggest files我们都知道中文含义为前10大文件,那么是只取10个文件吗?请考虑如下情况:当最大文件存在多个文件大小一致情况,还是取10个? 给指定目录,扫描,用递归估计就完蛋了。目录里面还有目录,用递归直接会栈溢出。 |
|
返回顶楼 | |
发表时间:2014-01-27
注意看题目要求啊:
Non-Functional Requirement: Please use OO design, TDD, design patterns etc. Take care about code style as well. ----- 最起码要有一个自己定义的类,里面有文件名称,文件大小属性。 |
|
返回顶楼 | |
发表时间:2014-01-28
steafler 写道 用堆结构直接解决
这B崽子直接在这废话 |
|
返回顶楼 | |
发表时间:2014-01-29
楼猪你在这里问面试题,CITI BANK知道么?
其实我当时用的是用runtime类直接跑dos dir指令,当然非要设计模式的话,那就来个工厂模式,加个linux版本 |
|
返回顶楼 | |