Java递归

来源:互联网 发布:聊天室软件销售 编辑:程序博客网 时间:2024/05/22 00:12
Java遍历文件夹的2种方法:

A.不使用递归:

import java.io.File;import java.util.LinkedList;public class FileSystem {    public static void main(String[] args) {        long a = System.currentTimeMillis();        LinkedList list = new LinkedList();        File dir = new File("c://java//");        File file[] = dir.listFiles();        for (int i = 0; i < file.length; i++) {            if (file[i].isDirectory())                list.add(file[i]);            else                System.out.println(file[i].getAbsolutePath());        }        File tmp;        while (!list.isEmpty()) {            tmp = list.removeFirst();            if (tmp.isDirectory()) {                file = tmp.listFiles();                if (file == null)                    continue;                for (int i = 0; i < file.length; i++) {                    if (file[i].isDirectory())                        list.add(file[i]);                    else                        System.out.println(file[i].getAbsolutePath());                }            } else {                System.out.println(tmp.getAbsolutePath());            }        }        System.out.println(System.currentTimeMillis() - a);    }}
B.使用递归:
import java.io.File;import java.util.ArrayList;public class FileSystem1 {    private static ArrayList filelist = new ArrayList();     public static void main(String[] args) {        long a = System.currentTimeMillis();        refreshFileList("c://java");        System.out.println(System.currentTimeMillis() - a);    }    public static void refreshFileList(String strPath) {         File dir = new File(strPath);         File[] files = dir.listFiles();         if (files == null)             return;         for (int i = 0; i < files.length; i++) {             if (files[i].isDirectory()) {                 refreshFileList(files[i].getAbsolutePath());             } else {                 String strFileName = files[i].getAbsolutePath().toLowerCase();                System.out.println("---"+strFileName);                filelist.add(files[i].getAbsolutePath());                                }         }     }}
结论:经过测试,使用递归的方法B性能相对好一些。

 

递归生成XML字符串

/**
*
**/
package com.css.yj.res.util.common;

import java.util.Iterator;
import java.util.List;

import com.css.yj.res.resListManage.model.DmSxlxBO;
import com.css.yj.res.util.model.XzqhVO;

public class XlToXML {
   /**
* <p>
* 功能说明:将下拉属性实体集合转换成XML 要求:列表集合元素必须按照树形结构放置
* </p>
*
* @param zyxl
*            树list
* @return String
* @throws
*/
public static String getTreeXML(List zyxl, String treeName) {
   StringBuffer buf = new StringBuffer(
     "<?xml version=/"1.0/" encoding=/"UTF-8/"?>");
   buf.append("<navi>");
   buf.append("<navi treeName=/"");
   buf.append(treeName);
   buf.append("/">");
   // 循环树节点,null表示循环第一层
   buf.append(getListToXML(zyxl, null));
   buf.append("</navi>");
   buf.append("</navi>");
   return buf.toString();
}

/**
* <p>
* 功能说明:将下拉属性实体集合转换成XML 要求:列表集合元素必须按照树形结构放置,递归实现
* </p>
*
* @param zyxl
*            树list,dsBO不为null,叶子节点的递归循环
* @return String
* @throws
*/

private static String getListToXML(List zyxl, DmSxlxBO dsBO) {
   StringBuffer buf = new StringBuffer();
   Iterator zyxl_ite = zyxl.iterator();
   DmSxlxBO bo = null;
   if (dsBO == null) {
    while (zyxl_ite.hasNext()) {
     bo = (DmSxlxBO) zyxl_ite.next();
     if ("".equals(bo.getSjlxbh()) || (bo.getSjlxbh() == null)) {
      buf.append("<navi prikey=/"" + bo.getLxbh()
        + "/" storeid=/"" + bo.getSjlxbh() + "/" title=/""
        + bo.getLxmc() + "/">/n");
      // 执行dsBO不为null的循环
      buf.append(getListToXML(zyxl, bo));
      buf.append("</navi>/n");
     }
    }
   } else {
    while (zyxl_ite.hasNext()) {
     bo = (DmSxlxBO) zyxl_ite.next();
     if (dsBO.getLxbh().equals(bo.getSjlxbh())) {
      buf.append("<navi prikey=/"" + bo.getLxbh()
        + "/" storeid=/"" + bo.getSjlxbh() + "/" title=/""
        + bo.getLxmc() + "/">/n");
      // 递归循环
      buf.append(getListToXML(zyxl, bo));
      buf.append("</navi>/n");
     }
    }
   }
   return buf.toString();
}
/*
* public static void main(String[] args) { List list = new ArrayList();
* DmSxlxBO bo = new DmSxlxBO(); bo.setLxbh("1"); bo.setSjlxbh("");
* bo.setLxmc("1111"); list.add(bo); DmSxlxBO bo1 = new DmSxlxBO();
* bo1.setLxbh("2"); bo1.setSjlxbh("1"); bo1.setLxmc("2222"); list.add(bo1);
* DmSxlxBO bo2 = new DmSxlxBO(); bo2.setLxbh("3"); bo2.setSjlxbh("1");
* bo2.setLxmc("3333"); list.add(bo2); DmSxlxBO bo3 = new DmSxlxBO();
* bo3.setLxbh("4"); bo3.setSjlxbh("2"); bo3.setLxmc("4444"); list.add(bo3);
* DmSxlxBO bo4 = new DmSxlxBO(); bo4.setLxbh("5"); bo4.setSjlxbh("3");
* bo4.setLxmc("5555"); list.add(bo4); DmSxlxBO bo5 = new DmSxlxBO();
* bo5.setLxbh("6"); bo5.setSjlxbh("4"); bo5.setLxmc("66666");
* list.add(bo5); DmSxlxBO bo6 = new DmSxlxBO(); bo6.setLxbh("7");
* bo6.setSjlxbh("5"); bo6.setLxmc("77777"); list.add(bo6); ZyBOToXML zbtXML =
* new ZyBOToXML(); System.out.println(zbtXML.getTreeXML(list)); }
*/

}