java计算参数目录大小的递归和迭代实现
2016-07-22 00:00
741 查看
练习题目代码如下:
在这个例子中,递归实现确实比迭代实现要简单一些,
在自己实现迭代的时候,起先想到用树型结构,但是后面觉得空间的复杂度和遍历方面不是很理想,
后来想了一下想到了这个方法用栈来实现确实是比较理想的
应该还有更好的实现方法,原谅我还没有想到,
因为这个例子让我想了好久,才想到这个方法所以记在這里
经验还是很欠缺,脑子也不行啊
import java.io.File; import java.io.IOException; import java.util.ArrayList; /** * Created by longforus on 8:50 PM 5/11/2016 . * IDEA-Chapter20_28 . * 把目录或文件作为参数传入 求其大小 */ public class Chapter20_28 { public static void main (String[] args) throws IOException { System.out.println (getFormatSize (getSize (new File (args[0])))); } // public static long getSize (File file) {//递归求文件夹的大小 // long size = 0; // if (file.isDirectory ()) { // File[] files = file.listFiles (); // for (int i = 0; i < files.length; i++) { // size += getSize (files[i]); // } // } else { // size += file.length (); // } // return size; // } public static long getSize (File file) {//迭代实现 long size = 0; ArrayList<File> list = new ArrayList<> ();//运用了栈的原理 if (file.isDirectory ()) { addToList (list, file);//是目录就把子目录入栈 } else { size += file.length ();//是文件就加入总size内 } while (! list.isEmpty ()) {//只要栈不空 File temp = list.remove (list.size () - 1);//取出栈顶处理 if (temp.isDirectory ()) { addToList (list, temp); } else { size += temp.length (); } } return size; } public static void addToList (ArrayList<File> list, File file) {//把file的内容入栈 File[] files = file.listFiles (); for (int i = 0; i < files.length; i++) { list.add (files[i]); } } public static String getFormatSize(long size){//得到格式化字符串 double tempSize = size; int n = 0; String unit = "Byte"; while (tempSize > 1024) { tempSize/=1024; n++; } switch (n) { case 1: unit = "KByte"; break; case 2: unit = "MByte"; break; case 3: unit = "GByte"; break; } return String.format ("%.2f%s",tempSize,unit); } }
在这个例子中,递归实现确实比迭代实现要简单一些,
在自己实现迭代的时候,起先想到用树型结构,但是后面觉得空间的复杂度和遍历方面不是很理想,
后来想了一下想到了这个方法用栈来实现确实是比较理想的
应该还有更好的实现方法,原谅我还没有想到,
因为这个例子让我想了好久,才想到这个方法所以记在這里
经验还是很欠缺,脑子也不行啊
相关文章推荐
- java文件读写的例子
- 用于表示分数的Rational类(java)
- java运算符优先级表
- Java序列化的作用和反序列化
- java利用反射扩展任意数组的方法
- java修饰符汇总
- java中集合的分类
- java中有关内部类的相关问题
- 自己动手设计java web框架(二)-自定义注解以及通过反射获取注解
- 自己动手设计java web框架(三)-执行请求路径所对应方法并返回
- 完美的java解决下载文件问题
- Java Lambda
- spring定时任务实现
- Java-日志-JdkLogging
- MyEclipse将Java项目打包成jar文件的三种方法
- Java中的代理
- springmvc原理及struts2比较&案例&整合&逆向工程&乱码&时间类型转换
- java.sql.Connection.close() vs null
- java AWT容器测试-Frame
- java AWT容器测试-Panel