我有一个评估树类。每个节点都有严格顺序的子节点服务器有这样的树的列表。
当客户机成功连接到服务器时,它会将许多不同的HashMaps发送到选定的树进行计算。典型的HashMaps有对:[variable string name,variable int value]。
每个TreeNode都有一个复杂的条件,该条件可以读取变量,并与其他变量或数字进行诸如and、OR、XOR之类的操作每个TreeNode也有语句,可以读/写变量,并将新变量放入HashMaps,随后可以在另一个TreeNode中读/写。
以下是这些树的简化结构:

public static class TreeNode {
    public static abstract class Condition {
        public abstract boolean evaluate(HashMap<String, Integer> contex);
    }

    public static abstract class Statement {
        public abstract void execute(HashMap<String, Integer> contex);
    }

    private Condition condition;
    private List<Statement> statements;
    private List<TreeNode> children;

    public void run(final HashMap<String, Integer> contex) {
        if (condition != null && !condition.evaluate(contex)) {
            return;
        }

        for (final Statement statement : statements) {
            statement.execute(contex);
        }

        for (final TreeNode child : children) {
            child.run(contex);
        }
    }
}

我的代码目前在Intel i7 u3517上每秒执行大约200000次迭代,用于具有100个节点的树和具有10个变量的输入HashMap我怎样才能加快速度?

最佳答案

如果您的语句和子语句可以并行运行,并且您使用的是java 8,那么您可以使用parallelStream()

        statements.parallelStream().forEach((statement) -> {
            statement.execute(contex);
        });

        children.parallelStream().forEach((child) -> {
            child.run(contex);
        });

09-11 15:50