0
1

Javaの `ArrayList` と `List` の違いの理解

Posted at

Javaプログラミングをしていると、リストを使う場面で ArrayList を使うか List を使うかで迷うことがあります。この記事では、ArrayList<Integer> array = new ArrayList<Integer>();List<Integer> array = new ArrayList<Integer>(); の違いを整理していきます。

宣言の違い

ArrayList<Integer> array = new ArrayList<Integer>();

これは、ArrayList 型の変数 array を宣言しています。具体的な ArrayList クラスを直接使うので、ArrayList 固有のメソッドや機能にアクセスできます。

ArrayList<Integer> array = new ArrayList<Integer>();
array.ensureCapacity(100); // ArrayList 固有のメソッド

この例では、ArrayListensureCapacity メソッドを使っています。このメソッドは、ArrayList 特有のものです。

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

こちらは、List インターフェース型の変数 array を宣言しています。ArrayList を実装として使っていますが、コードの他の部分では List インターフェースのメソッドしか使いません。

List<Integer> array = new ArrayList<Integer>();
// array.ensureCapacity(100); // List インターフェースにはこのメソッドがないため使用できません

// 他の List 実装に変更が容易
array = new LinkedList<Integer>();

この例では、後から LinkedList に変更しても問題なく動作します。List インターフェースを使うことで、具体的な実装に依存しない柔軟なコードが書けます。

インターフェースと実装の違い

List インターフェース

  • List はリストの一般的な操作を定義するインターフェースです。
  • ArrayListLinkedList など、複数の実装クラスがあります。
  • List インターフェースを使うと、具体的な実装に依存しないコードが書けます。

ArrayList クラス

  • ArrayListList インターフェースを実装した具体的なクラスです。
  • 配列に基づいたリストの実装で、要素のランダムアクセスが高速です。
  • 固有のメソッドや機能があり、直接使用する場合はそれらを利用できます。

使い分けのポイント

ArrayList<Integer> array = new ArrayList<Integer>(); を使う場合

  • 具体的な ArrayList クラスの機能を使いたい場合。
  • 実装が変更されないことが確実な場合。

List<Integer> array = new ArrayList<Integer>(); を使う場合

  • インターフェース型を使うことで、後で List の他の実装に変更する可能性がある場合。
  • より柔軟でメンテナンスしやすいコードを書きたい場合。

具体的な例

以下の例で、List 型を使うメリットを示します。

// インターフェース型の使用
List<Integer> array = new ArrayList<Integer>();
array.add(1);
array.add(2);
array.add(3);

// 実装を変更しても問題ない
array = new LinkedList<Integer>();
array.add(4);
array.add(5);

このように、インターフェース型を使うことで、後で実装を変更する際の影響を最小限に抑えることができます。

まとめ

  • ArrayList<Integer> array = new ArrayList<Integer>(); は具体的な ArrayList 型を使い、 ArrayList 固有のメソッドや機能にアクセスできます。
  • List<Integer> array = new ArrayList<Integer>();List インターフェースを使い、コードの柔軟性とメンテナンス性を高めます。後で実装を変更する場合に便利です。
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1