抽象单位类,Soldier和TroopUnit的基类:
package com.sitinspring;


/** *//**
* 抽象单位类,Soldier和TroopUnit的基类
* @author sitinspring(junglesong@gmail.com)
*
* @date 2007-12-4
*/

public abstract class Unit
{
// 单位名
protected String name;

// 所在单位
protected TroopUnit currTroopUnit;

protected static final String TAB = " ";


public Unit(String name)
{
this.name = name;
}

// 打印信息,强制子类实现
public abstract void printInfo(String tabs);

// 取得单位的绝对路径

public String getPath()
{
StringBuffer sb = new StringBuffer();

TroopUnit troopUnitointer = currTroopUnit;


if (troopUnitointer == null)
{
return "顶级";
}

while (troopUnitointer != null)
{
// 取得的单位名放置在前方
sb.insert(0, troopUnitointer.name + "/");

// 继续向上回溯
troopUnitointer = troopUnitointer.currTroopUnit;
}

return sb.toString();
}


public void setCurrTroopUnit(TroopUnit currTroopUnit)
{
this.currTroopUnit = currTroopUnit;
}


public void setName(String name)
{
this.name = name;
}


public TroopUnit getCurrTroopUnit()
{
return currTroopUnit;
}


public String getName()
{
return name;
}
}
Soldier类:
package com.sitinspring;


/** *//**
* Soldier类,继承自Unit
* @author sitinspring(junglesong@gmail.com)
*
* @date 2007-12-4
*/

public class Soldier extends Unit
{

public Soldier(String name)
{
super(name);
}

/** *//**
* 打印士兵的信息
*/

public void printInfo(String tabs)
{
System.out.println(tabs+" 士兵名="+name+" path="+getPath());
}
}
军事建制单位类:
package com.sitinspring;

import java.util.ArrayList;
import java.util.List;


/** *//**
* 军事建制单位类,继承自Unit
* @author sitinspring(junglesong@gmail.com)
*
* @date 2007-12-4
*/

public class TroopUnit extends Unit
{
// 属下的单位集合,包括士兵及建制单位
private List<Unit> units;

public TroopUnit(String name)
{
super(name);
}
// 删除一个单位

public void remove(Unit unit)
{
units.remove(unit);
}
// 添加一个单位

public void add(Unit unit)
{

if (units == null)
{
units = new ArrayList<Unit>();
}

units.add(unit);

// 设置添加单位的所在单位为自身
unit.setCurrTroopUnit(this);
}

/** *//**
* 按名字查找
* @param name
* @param foundUnits
*/

public void findbyName(String name,List<Unit> foundUnits)
{
// 对空目录进行检查,以防空指针异常发生

if (units == null)
{
return;
}

// 遍历查找

for (Unit unit : units)
{

if (unit instanceof TroopUnit)
{
// 找到目录
TroopUnit troopUnit = (TroopUnit) unit;

if (troopUnit.units == null

|| troopUnit.units.size() == 0)
{
continue ;

} else
{
// 有子单位则继续向下递归遍历
troopUnit.findbyName(name,foundUnits);
}


} else
{
Soldier soldier = (Soldier) unit;


if (soldier.getName().contains(name))
{
foundUnits.add(soldier);
}
}
}
}


/** *//**
* 打印单位信息,包括其下包括的单位
*/

public void printInfo(String tabs)
{
// 输出本身的信息
System.out.println(tabs + " 单位名=" + name + " path=" + getPath());

// 对属下的单位集合进行检查,以防空指针异常发生

if (units == null)
{
return;
}

// 将属下的单位集合中的文件目录信息也打印出来

for (Unit unit : units)
{
// tabs + TAB是让下到一层目录就缩进一次
unit.printInfo(tabs + TAB);
}
}
}
调用:
package com.sitinspring;

import java.util.ArrayList;
import java.util.List;


/** *//**
* 程序入口
* @author sitinspring(junglesong@gmail.com)
*
* @date 2007-12-4
*/

public class Main
{

public static void main(String[] args)
{
// 一级一级的建立体系结构
Soldier xsd=new Soldier("许三多");
TroopUnit sanban=new TroopUnit("三班");
sanban.add(xsd);
Soldier xsd1=new Soldier("许二多");
TroopUnit wuban=new TroopUnit("五班");
wuban.add(xsd1);
TroopUnit yipai=new TroopUnit("一排");
yipai.add(sanban);
yipai.add(wuban);
TroopUnit qilian=new TroopUnit("七连");
qilian.add(yipai);
Soldier wuliuyi=new Soldier("伍六一");
TroopUnit yiban=new TroopUnit("一班");
yiban.add(wuliuyi);
TroopUnit yipai1=new TroopUnit("一排");
yipai1.add(yiban);
TroopUnit yilian=new TroopUnit("一连");
yilian.add(yipai1);
TroopUnit yiying=new TroopUnit("一营");
yiying.add(qilian);
yiying.add(yilian);
TroopUnit zhuangjiatuan=new TroopUnit("装甲团");
zhuangjiatuan.add(yiying);
TroopUnit zhuangjiashi=new TroopUnit("装甲师");
zhuangjiashi.add(zhuangjiatuan);
TroopUnit sanshibajun=new TroopUnit("甲种军");
sanshibajun.add(zhuangjiashi);
// 打印整体结构
sanshibajun.printInfo("");
// 找出名字中包含"许"的士兵
List<Unit> foundUnits=new ArrayList<Unit>();
sanshibajun.findbyName("许", foundUnits);
// 打印找出的单位

for(Unit unit:foundUnits)
{
unit.printInfo("");
}
}
}
执行结果:
单位名=甲种军 path=顶级
单位名=装甲师 path=甲种军/
单位名=装甲团 path=甲种军/装甲师/
单位名=一营 path=甲种军/装甲师/装甲团/
单位名=七连 path=甲种军/装甲师/装甲团/一营/
单位名=一排 path=甲种军/装甲师/装甲团/一营/七连/
单位名=三班 path=甲种军/装甲师/装甲团/一营/七连/一排/
士兵名=许三多 path=甲种军/装甲师/装甲团/一营/七连/一排/三班/
单位名=五班 path=甲种军/装甲师/装甲团/一营/七连/一排/
士兵名=许二多 path=甲种军/装甲师/装甲团/一营/七连/一排/五班/
单位名=一连 path=甲种军/装甲师/装甲团/一营/
单位名=一排 path=甲种军/装甲师/装甲团/一营/一连/
单位名=一班 path=甲种军/装甲师/装甲团/一营/一连/一排/
士兵名=伍六一 path=甲种军/装甲师/装甲团/一营/一连/一排/一班/
士兵名=许三多 path=甲种军/装甲师/装甲团/一营/七连/一排/三班/
士兵名=许二多 path=甲种军/装甲师/装甲团/一营/七连/一排/五班/

代码下载:
http://www.blogjava.net/Files/sitinspring/TroopTree20071204123647.rar