-2

「星」を登っていくゲームアプリを作っています。

ベクターオブジェクトが一番上の「星」を保持するようにします。

したがって、grapTopMostStars メソッドは、使用するベクター オブジェクトに対して .clear() を呼び出してから、一番上の星を把握します。

しかし、私の親しい友人は、Vector にあった以前の星はあまり気にしないので、新しい Vector オブジェクトを宣言するだけではどうだろうと教えてくれました。

彼は有効に聞こえますが、モバイルでこのゲームを作成しているので、新しいインスタンスを何度も作成するとアプリケーションの速度が低下するのではないかと心配しています。

4

1 に答える 1

4

clearremoveAllElements次のように実装されている内部呼び出し:

  651       public synchronized void removeAllElements() {
  652           modCount++;
  653           // Let gc do its work
  654           for (int i = 0; i < elementCount; i++)
  655               elementData[i] = null;
  656   
  657           elementCount = 0;
  658       }

ベクターを反復してすべてのエントリを設定nullすると、新しいベクターを作成するよりも明らかにオーバーヘッドが大きくなります。

ちなみに、可能であれば、をに置き換える必要がありVectorますArrayListJavadocには次のように記載されています。

Java 2 プラットフォーム v1.2 以降、このクラスは List インターフェースを実装するように改良され、Java Collections Framework のメンバーになりました。新しいコレクションの実装とは異なり、Vector は同期されます。スレッドセーフな実装が必要ない場合は、Vector の代わりに ArrayList を使用することをお勧めします。

(スレッド セーフなものは、非同期の非スレッド セーフ クラスよりも低速です。)

于 2013-05-27T20:43:25.497 に答える