gpt4 book ai didi

java - 复合模式的递归迭代器

转载 作者:行者123 更新时间:2023-11-29 06:58:09 25 4
gpt4 key购买 nike

我有树类 AbstractComponent、Leaf 和 Composite:

public abstract class AbstractComponent {
privavte String name;

[...]
}

public class Leaf extends AbstractComponent {
[...]
}

public Composite extends AbstractComponent {
private List<AbstractComponent> children;

public void addChild(AbstractComponent a) {
[...]
}

public List<AbstractComponent> getChildren() {
return children;
}
}

我的问题:如何在 Java 中为基于复合模式的模型编写递归迭代器?我读了这个问题(Creating a recursive iterator)。可以对我的问题采用公认的答案吗?我还从 Guava 找到了 TreeTraverser 类,但它似乎仅限于一个表示节点的类。

最佳答案

首先是一些术语方面的帮助。

  • Iterators不是递归的。你要找的是Tree Traversal的攻略.

  • 虽然树遍历实现通常是递归的,但它们通常不会用于迭代器。

  • 组件对象的结构称为 generic tree .

第 1 您需要选择遍历复合结构的方式(也称为通用树)

user1121883's如果您没有特定的遍历顺序要求,解决方案是一个很好的选择,因为它实现起来很简单。

如果您需要实现不同的策略(例如深度优先),请尝试以下操作

class AbstractComponent {

public Iterator<AbstractComponent> iterator() {
List<AbstractComponent> list = new LinkedList<AbstractComponent>();
addAllChildren(list);
list.add(this);
return list.iterator();
}

protected abstract void addAllChildren(List<AbstractComponent> list);
}

public class Leaf extends AbstractComponent {

//...

protected void addAllChildren(List<AbstractComponent> list) {
//DO NOTHING
}
}

public class Composite extends AbstractComponent {

//...

protected void addAllChildren(List<AbstractComponent> list) {
for (AbstractComponent component : children) {
// This is where you implement your traversal strategy
component.addAllChildren(list);
list.add(component);
}
}
}

关于java - 复合模式的递归迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30779515/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com