私のプロジェクトでは、スクリプトから大量の関数をコレクションにロードして、それらを保持し、スクリプトを再度読み取らずに後で (おそらく何度も) 実行したいと考えています。関数へのアクセスをできるだけ高速にする必要があり、そのための 2 つの方法を考えました。
コマンド パターン: 最初のアイデアは、スクリプト コマンドをオブジェクト (コマンド パターン) としてコレクション内に保存し、スクリプトを実行する必要があるときに for-each-loop 内でそれらすべてを実行することでした。コードは読みやすくなりますが、オブジェクトを介してすべての異なるコマンドにアクセスするには、多くのパフォーマンスとメモリが必要になると思います。
for (Command command : commandList) { command.execute();
char のコレクションとケースの切り替え: 私の 2 番目のアイデアは、char や int などのプリミティブ変数をコレクションに格納し、ケースの切り替え構造を for-each ループ内に配置することでした。プリミティブを使用するのは、String オブジェクトよりも速いと思うからです。したがって、Trove のようなライブラリを使用します。コマンドオブジェクトにアクセスする必要がないため、この方法はコマンドパターンよりも高速になる可能性があると思います。さらに、占有されるメモリが少なくなります。一方、コマンドパターンは適切な関数に直接アクセスできるのに対し、switch-case コンストラクトは文字が a、b、c、d などであるかどうかを何度もチェックする必要があるため、遅くなる可能性があると思います。
for (char command : commandList) { switch(command){ case 'a': doA(); break; case 'b': doB(); break; case 'c': ... } }
片道の方が良いと思いますか?別の方法を知っていますか?どのタイプのコレクションをお勧めしますか?