1

これら2つに違いはありますか?もしそうなら、それは何ですか?

List<Integer> x = new ArrayList<Integer>();

ArrayList<Integer> x = new ArrayList<Integer>();
4

4 に答える 4

2

最初の宣言により、インターフェースをプログラムできます。これにより、後で安全に を置き換えることができArrayListLinkedList残りのコードはコンパイルされます。

ArrayList2 番目の宣言では、クラスにプログラミングできるため、インターフェイスを実装しないメソッドを使用できる可能性がありListます。たとえば、 として宣言されたリストでは呼び出すことができますがensureCapacity()、 として宣言されたリストでは呼び出すことができArrayListませんList。一般的にはインターフェイスへのプログラミングが推奨されますが、クラス固有のメソッドを呼び出さなければならない場合は、それを行っても問題はありません。たとえば、ensureCapacity()リストの新しいターゲット サイズがわかっている場合、呼び出す機能により、不要な再割り当てを節約できます。

于 2013-05-09T17:07:48.823 に答える
0

インターフェースにコーディングする場合は、あまり手間をかけずに実装を変更できます

List<Integer> x = new ArrayList<Integer>();

たった 1 行のコードで x を LinkedList またはその他の List の実装を指すようにすることができます。ArrayList にある特定のメソッドが必要な場合は、左側に ArrayList を配置しても問題ありません。100 人中 99 人がそうは思わないので、リストが優先されます

于 2013-05-09T17:09:03.170 に答える
0

andをArrayList指定できるintitalsizeので、ArrayList にはtrimToSize()そのサイズを現在のサイズにトリミングするメソッドがList<Integer>あります。キャストし直さない限り、サイズをトリミングすることはできません。ArrayList

于 2013-05-09T17:10:15.390 に答える
0

前者が好ましい。フィールドに依存するコードを変更せずに実装を変更できます。

ジョシュア・ブロッホは『Effective Java』で次のように述べています

適切なインターフェイス タイプが存在する場合、パラメーター、戻り値、変数、およびフィールドはすべて、インターフェイス タイプを使用して宣言する必要があります。

...

インターフェイスを型として使用する習慣を身につければ、プログラムはより柔軟になります。

于 2013-05-09T17:07:27.623 に答える