快速树评估

时间:2015-04-07 15:21:56

标签: java algorithm tree high-load

我有一个评估树类。每个节点都有严格的子节点。服务器有一个这样的树的列表。

当客户端成功连接到服务器时,它会向选定的树发送大量不同的HashMaps进行计算。典型的HashMap具有对:[变量字符串名称,变量int值]。

每个TreeNode都有一个复杂的条件,它可以读取变量并具有AND,OR,XOR等操作,与其他变量或数字进行比较。每个TreeNode也有语句,可以读/写变量并将新变量放到HashMap中,随后可以在另一个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。我怎样才能加快速度?

1 个答案:

答案 0 :(得分:0)

如果您的语句和子项可以并行运行并且您使用的是Java 8,则可以使用parallelStream()

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

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