我有一个评估树类。每个节点都有严格的子节点。服务器有一个这样的树的列表。
当客户端成功连接到服务器时,它会向选定的树发送大量不同的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
。我怎样才能加快速度?
答案 0 :(得分:0)
如果您的语句和子项可以并行运行并且您使用的是Java 8,则可以使用parallelStream()
。
statements.parallelStream().forEach((statement) -> {
statement.execute(contex);
});
children.parallelStream().forEach((child) -> {
child.run(contex);
});