java.utilsでEnumerationがListでなくArrayListに変換されるのはなぜですか?
質問
のように
Collections.list()
メソッドが
java.utils
パッケージの
ArrayList<T>
の代わりに
List<T>
?
明らかに
ArrayList
は
List
を返しますが、一般的には実装型ではなくインターフェース型を返すのが良いという印象があります。
どのように解決するのですか?
免責事項: 私はJDKの作者ではありません。
を書くのが正しいということに同意します。
独自のコード
をインターフェイスに書くのは正しいことですが、もしあなたが
ミュータブル
コレクションを第三者に返すのであれば、第三者にどのような
List
を第三者に知らせることが重要です。
LinkedList
そして
ArrayList
は、様々な操作において、パフォーマンス的に非常に異なっています。例えば、最初の要素を削除する場合
ArrayList
は
O(n)
の最初の要素を削除することはできません。
LinkedList
は
O(1)
.
戻り値の型を完全に指定することで、JDKの作者は
余分な情報を伝達する
そのため、このメソッドを適切に使用するようにコードを記述することができます。もしあなたが本当に
LinkedList
が本当に必要なら、ここで指定しなければならないことがわかるでしょう。
最後に、実装よりもインターフェイスにコードを書く主な理由は、実装が変更されると考えている場合です。JDK の作者は、おそらく彼らが
決して
を返すことはないでしょう。
LinkedList
または
Collections.UnmodifiableList
. しかし、ほとんどの場合、やはりそうするのでしょう。
List<T> list = Collections.list(enumeration);
関連
-
java.sql.SQLException: 結果セットの開始前
-
[解決済み] リフレクションとは何か、なぜ有用なのか?
-
[解決済み] なぜJavaにはtransientフィールドがあるのですか?
-
[解決済み] 整数の平方根が整数であるかどうかを判断する最速の方法
-
[解決済み] List<Dog> は List<Animal> のサブクラスですか?Java のジェネリックはなぜ暗黙のうちに多相性にならないのですか?
-
[解決済み] Javaでリストを反復処理する方法
-
[解決済み] メソッドの戻り値の型を汎用的にするにはどうすればよいですか?
-
[解決済み] なぜJava 8のOptionalは引数で使ってはいけないのか
-
[解決済み】Javaではfinallyブロックは必ず実行されるのですか?
-
[解決済み】nullと空のコレクションのどちらを返すのが良いですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
NullPointerException - java.lang.
-
XMLファイル操作時のjava.util.NoSuchElementExceptionを解決する方法。
-
executeQuery()でデータ操作文が発行できない。解決方法
-
JAVA_HOME環境変数が正しく定義されていない問題を解決する
-
名前 'XXX' を持つ Bean の作成に失敗しました。自動依存関係の注入に失敗しました 解決方法
-
Java Notes 005_この行に複数のマーカーがある - キーを変数に解決できない - シンタックスエラー、ins
-
代入の左辺は変数でなければならない 解答
-
春ブート複数のデータソースの管理(atomikos)同じサーバーホスト上の複数のプロジェクトを開始する複数のJava - jarのエラーソリューション
-
アクセス制限の解決方法: ---- in Java
-
テストが空であるかどうかを判断するためのオプションの処理