あなたはどちらを好みますか?
Java で有限オートマトンを作成したい。vector または set を使用する方が効率的ですか?
ベクトルはクラスです。Set はインターフェイスです。とにかく、スレッドセーフにする必要があることをしていない場合は、Vector の代わりに ArrayList を使用します。または、サイズが変更されない場合は標準配列。
ただし、実際にはアプリケーションに依存します。具体的には、セットは要素の重複を許可しませんが、配列 (配列リスト、ベクター) は許可します。
個人的には、ある種の特別な機能 (サイズ変更、要素の重複なしなど) が必要でない限り、配列を使用します。
AVector
と aSet
は 2 つの異なるデータ構造です。それらは同じ目的のために交換可能ではありません。
Vector
には、定義された順序で要素が含まれており、重複を含めることができます (リストです)。Set
には固有の順序がなく、重複を含めることはできません (要素が順序付けられていないバッグです)。どちらを使用する必要があるかは、アプリケーションをどのように設計および実装するかによって異なります。Vector
どのようにそれを行ったのかを知らなければ、 a と a のどちらを使用すべきかを言うことはできませんSet
。
注: classは従来のコレクション クラスです。代わりにjava.util.Vector
実際に使用する必要があります。java.util.ArrayList
セットは挿入と削除でより効率的ですが、ベクトルはこれらのことを遅くします。ただし、ベクトルのように選択したインデックスに要素を格納することはできません。
ルックアップはベクトルでは最速ですが、セットでは少し遅くなる可能性があります。
データが定数の場合は、ベクトルを使用する必要があります。頻繁に変更する場合は、セットを使用する必要があります。
ベクトルの代わりにリスト実装を使用したいと思います。ベクトルはスレッド セーフですが、そのためにオーバーヘッドが発生します。List はスレッド セーフではありませんが、要素を追加、削除、および取得するすべての呼び出しをいつでも同期できます。
特定の順序で要素を取得しようとしている場合、カサブランカが言ったように、セットにはいくつかの奇妙な動作があります。また、セットはそのように機能し、必要な場合に要素を繰り返すことはできません。
どちらも異なる種類のアクティビティ用です。ベクトルとリストはどちらも同じタスク用であり、実装方法が異なります。セットは、セットのように機能する必要がある場合にのみ使用されます。
有限オートマトンの実装には Set の方が適していると思います。たとえば、 Set を使用して、要素が重複しないことを保証する必要があります。Automata の定義では、一連の状態、一連のシンボル、および一連の受け入れられた状態があるため、Set は要件に適合します。