抽象單位類,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;
}

// 打印信息,強(qiáng)制子類實(shí)現(xiàn)
public abstract void printInfo(String tabs);

// 取得單位的絕對(duì)路徑

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

TroopUnit troopUnitointer = currTroopUnit;


if (troopUnitointer == null)
{
return "頂級(jí)";
}

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

// 繼續(xù)向上回溯
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);
}
// 刪除一個(gè)單位

public void remove(Unit unit)
{
units.remove(unit);
}
// 添加一個(gè)單位

public void add(Unit unit)
{

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

units.add(unit);

// 設(shè)置添加單位的所在單位為自身
unit.setCurrTroopUnit(this);
}

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

public void findbyName(String name,List<Unit> foundUnits)
{
// 對(duì)空目錄進(jìn)行檢查,以防空指針異常發(fā)生

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
{
// 有子單位則繼續(xù)向下遞歸遍歷
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());

// 對(duì)屬下的單位集合進(jìn)行檢查,以防空指針異常發(fā)生

if (units == null)
{
return;
}

// 將屬下的單位集合中的文件目錄信息也打印出來

for (Unit unit : units)
{
// tabs + TAB是讓下到一層目錄就縮進(jìn)一次
unit.printInfo(tabs + TAB);
}
}
}
調(diào)用:
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)
{
// 一級(jí)一級(jí)的建立體系結(jié)構(gòu)
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("一營(yíng)");
yiying.add(qilian);
yiying.add(yilian);
TroopUnit zhuangjiatuan=new TroopUnit("裝甲團(tuán)");
zhuangjiatuan.add(yiying);
TroopUnit zhuangjiashi=new TroopUnit("裝甲師");
zhuangjiashi.add(zhuangjiatuan);
TroopUnit sanshibajun=new TroopUnit("甲種軍");
sanshibajun.add(zhuangjiashi);
// 打印整體結(jié)構(gòu)
sanshibajun.printInfo("");
// 找出名字中包含"許"的士兵
List<Unit> foundUnits=new ArrayList<Unit>();
sanshibajun.findbyName("許", foundUnits);
// 打印找出的單位

for(Unit unit:foundUnits)
{
unit.printInfo("");
}
}
}
執(zhí)行結(jié)果:
單位名=甲種軍 path=頂級(jí)
單位名=裝甲師 path=甲種軍/
單位名=裝甲團(tuán) path=甲種軍/裝甲師/
單位名=一營(yíng) path=甲種軍/裝甲師/裝甲團(tuán)/
單位名=七連 path=甲種軍/裝甲師/裝甲團(tuán)/一營(yíng)/
單位名=一排 path=甲種軍/裝甲師/裝甲團(tuán)/一營(yíng)/七連/
單位名=三班 path=甲種軍/裝甲師/裝甲團(tuán)/一營(yíng)/七連/一排/
士兵名=許三多 path=甲種軍/裝甲師/裝甲團(tuán)/一營(yíng)/七連/一排/三班/
單位名=五班 path=甲種軍/裝甲師/裝甲團(tuán)/一營(yíng)/七連/一排/
士兵名=許二多 path=甲種軍/裝甲師/裝甲團(tuán)/一營(yíng)/七連/一排/五班/
單位名=一連 path=甲種軍/裝甲師/裝甲團(tuán)/一營(yíng)/
單位名=一排 path=甲種軍/裝甲師/裝甲團(tuán)/一營(yíng)/一連/
單位名=一班 path=甲種軍/裝甲師/裝甲團(tuán)/一營(yíng)/一連/一排/
士兵名=伍六一 path=甲種軍/裝甲師/裝甲團(tuán)/一營(yíng)/一連/一排/一班/
士兵名=許三多 path=甲種軍/裝甲師/裝甲團(tuán)/一營(yíng)/七連/一排/三班/
士兵名=許二多 path=甲種軍/裝甲師/裝甲團(tuán)/一營(yíng)/七連/一排/五班/

代碼下載:
http://m.tkk7.com/Files/sitinspring/TroopTree20071204123647.rar