我想知道是否有比我一直在做的更有效的方法来搜索多树。我最近为一个项目构建了一个多树数据结构,如下图所示。
洞穴会将各方放在一个数组列表中。不同的政党将拥有不同的生物。不同的生物会持有不同的物品。
我需要一种方法来搜索整个树以将对象与它具有的属性(例如索引)匹配。这是我的程序的一个片段,它搜索每个 ArrayList 以查看是否有一方、生物、宝藏或神器与我称为 index 的 int 匹配。
编辑(解释我的代码)Party、Creature、Treasure 和 Artifact 类都具有索引、名称、类型等属性。多树将 Cave 设置为根注释。Cave 有一个 ArrayList 可以包含许多 Party 对象。每个 Party 都有一个 ArrayList,可以包含多个 Creature 对象。每个生物都有两个数组列表,一个用于保存神器对象,一个用于保存宝藏对象。
下面我正在搜索以查看哪个派对、生物、神器或宝藏拥有我正在搜索的特定索引。我通过迭代派对来做到这一点,每个派对我都查看生物,每个生物我查看文物和宝藏。这就是为什么我在 for 循环中有这么多 for 循环:(。
case 0 :
int index = Integer.parseInt( stat );
for ( Party p : SorcerersCave.theCave.parties ) {
if ( index == p.getIndex()) {
generateInterface.theGame.printOutput( "\t" + p );
break;
} else {
for ( Creature c : p.members ){
if ( index == c.getIndex() ){
generateInterface.theGame.printOutput( "\t" + c );
break;
} else {
for ( Treasure t : c.inventory ){
if ( index == t.getIndex() ){
generateInterface.theGame.printOutput( "\t" + t );
break;
}
}
for ( Artifact a : c.artifacts ){
if ( index == a.getIndex() ){
generateInterface.theGame.printOutput( "\t" + a );
break;
}
}
}
}
}
}
我觉得这段代码太复杂,难以理解。该代码有效,但它对我原本非常好看的代码来说是一个丑陋的污点。我一直在寻找更好的方法来做到这一点,甚至是改进它的方法。
注意* 项目要求禁止我们将每个对象放在同一个 ArrayList 中。