1

私は評価ツリークラスを持っています。各ノードには厳密な順序で子があります。サーバーには、そのようなツリーのリストがあります。

HashMapsクライアントがサーバーに正常に接続すると、計算のために選択されたツリーにさまざまなものが送信されます。典型的なHashMaps には、[変数文字列名、変数 int 値] のペアがあります。

それぞれ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);
        }
    }
}

HashMap私のコードは現在、100 個のノードを持つツリーと10 個の変数を持つ入力に対して、Intel i7 u3517 で約 200000 回/秒の反復を実行します。どうすれば高速化できますか?

4

1 に答える 1

0

ステートメントと子を並行して実行でき、Java 8 を使用している場合は、parallelStream().

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

        children.parallelStream().forEach((child) -> {
            child.run(contex);
        });
于 2015-04-07T15:43:37.193 に答える