私が知りたいのは、どちらがより効率的かということです.1D配列を使用して100単語をリストするか、Javaで同じことを行うために配列リストを作成する必要がありますか?
注:これまで配列しか使用していませんでした。配列リストは私にとって少し新しいものでした。それが何であるかは知っていますが、これまで使用したことがなく、単語をランダムに選択するためにも使用されます。
最初から要素の最終的な数がわかっている場合は、配列に対してArrayListを使用しても意味がありません。ArrayListは動的です。拡張することはできますが、パフォーマンスとメモリスペースの要件の観点から、少額の費用がかかります。違いはわずかですが、自動成長機能が必要ない場合はArrayList
、なぜそれを求めるのですか?
ただし、それに加えて、スプラッシュを大きくする(またはしない)ことができる注釈基準があります。配列は共変であり、ArrayListはそうではありません。つまり、BがAのサブクラスである場合、Aの配列への参照もBの配列への参照を受け入れることができますが、AのArrayListへの参照はBのArrayListを受け入れることができません。 BはAの配列の共変量と見なされますが、AのArrayListは次のようにはなりません。
class A {}
class B extends A {}
A[] a = new B[1]; // OK
ArrayList<A> a2 = new ArrayList<B>(); // Error.
この最後のエラーを回避するには、次のようなタイプのファミリを試してください。
ArrayList<? extends A> a3 = new ArrayList<B>();
しかし、その後、ArrayLista3の共変性を制限しています。
a3.add(new A()); // Error!
a3.add(new B()); // Error again!
ただし、クラスの階層がある場合は、通常、スーパークラスで作業を続けることをお勧めします。したがって、BがAのサブクラスであるオブジェクトBのセットがある場合でも、これらのオブジェクトBへの参照を保持するためにB[]とArrayListの代わりにA[]とArrayListを保持する方が、OOPに適していることが多く、操作が簡単です。 。
場合によっては、AからアクセスできないプロパティまたはBのメソッドにアクセスするために、AからBにキャストする必要があります。ただし、これは設計の弱点と見なすことができます。OOPは、ポリモーフィズムを最大限に活用し、基本クラス(またはスーパークラス)がすべてのサブクラスのプロパティとメソッドにアクセスするために必要なすべての仮想関数を備えている必要がある場合に最適に機能します。したがって、サブクラスへの参照を維持できる必要があります。その後キャストすることなく、基本クラスを使用します。
を使用することをお勧めしますList
。パフォーマンスに基づいて、配列とリストの間にそのような違いはほとんどありません。
ただし、List
コードの場合は、配列と比較して管理が簡単で柔軟になります。
ここで効率が最大の懸念事項である場合は、心配する必要はありません。好きな方を使用してください。アプリケーションの 99.99% (完全に構成されている) では、配列とリストのパフォーマンスに大きな違いは見られません。一般に、操作が簡単なため、リストは配列よりも優先されます。