オブジェクト指向プログラミングでは、実際には存在しないものを独自に作成することができます。List はその 1 つで、インターフェイスです。インターフェースは実際にはコードで何もしていませんが、約束または契約として機能します。
リストを作成するにはさまざまな方法があります。特定のアプリケーションでは遅い方法もあれば、速い方法もあります。最も一般的な 2 つは ArrayList と LinkedList です。ArrayList は配列内のリストをバックアップし、非常に高速なインデックス作成をサポートします。位置 n のオブジェクトを非常に迅速に取得できます。LinkedList は、新しいオブジェクトの追加と削除が高速です (実際にはそうではありません。その理由はそれよりも少し深いところにあります)。場合によっては、一方が優れている場合もあれば、他方が優れている場合もあります。
したがって、リストを通過して各項目のデータを取得するメソッドを作成する場合、それらのリスト実装のいずれかの特別な機能に依存していません。どちらを選ぶべきですか?私が使用するものだと勝手に決めたという理由だけで、ユーザーに LinkedList から ArrayList を作成するよう強制する必要がありますか?
リストはここでの答えです。彼らがどのようにリストを作成したかについて、私は何の仮定もしていません。私がしているのは、すべてのリストにあるとわかっているいくつかの方法に依存しているだけなので、ユーザーを私に合わせさせません。しかし、List 自体にはインスタンス化するものは何もありません。new List() を呼び出すと、それは何を意味するのでしょうか? まあ、それは何の意味もありません。
しかし、あなたはすることができます
List<String> stringList = new ArrayList<String>()
何故ですか?「新しい」は、リスト、ArrayList の実際の実装で呼び出されています。これは一般的な使用法ではありませんが、リストの約束だけでなく、実際には実際のリストが背後にあるため、許可されています。