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