MENU

【Java入門】現役エンジニアが解説!ArrayListの使い方・基礎知識を徹底解説

こんにちは!バックエンドエンジニアのキョンです。今回は、Javaで最もよく使用されるコレクションの1つである「ArrayList」について、実務での経験を交えながら詳しく解説していきます。

目次

1. ArrayListとは

配列との違い

新人時代、私は「配列があるのになぜArrayListが必要なんだろう?」と疑問に思っていました。実は、これは多くの方が持つ疑問なんです。

ArrayListの最大の特徴は、サイズが動的に変更できるという点です。従来の配列と違って、要素数を事前に決める必要がありません。

ArrayListの特徴

  • 動的なサイズ変更が可能
  • インデックスによる高速アクセス
  • null要素の格納が可能
  • ジェネリクスに対応

2. ArrayListの基本操作

初期化方法

// 基本的な初期化
ArrayList<String> list = new ArrayList<>();

// 初期容量を指定した初期化
ArrayList<String> list2 = new ArrayList<>(10);

// 要素を指定した初期化
ArrayList<String> list3 = new ArrayList<>(Arrays.asList("Java", "Python", "Ruby"));

主要なメソッド

実務でよく使用するメソッドを紹介します:

ArrayList<String> languages = new ArrayList<>();

// 要素の追加
languages.add("Java");              // 末尾に追加
languages.add(0, "Python");         // インデックスを指定して追加

// 要素の取得
String lang = languages.get(0);     // "Python"が取得できる

// 要素の削除
languages.remove("Java");           // 要素を指定して削除
languages.remove(0);                // インデックスを指定して削除

// サイズの取得
int size = languages.size();

// 要素の存在確認
boolean exists = languages.contains("Java");

3. ArrayListのパフォーマンス特性

時間計算量

私が実務で特に注意しているのが、各操作の計算量です:

  • 要素の追加(末尾): O(1) ※再配置が必要な場合を除く
  • 要素の追加(任意の位置): O(n)
  • 要素の取得: O(1)
  • 要素の削除: O(n)
  • 検索: O(n)

メモリ使用量

実際のプロジェクトでは、メモリ使用量も重要な考慮点です:

// メモリ効率の良い初期化
ArrayList<String> efficientList = new ArrayList<>(expectedSize);

4. 実務でのArrayList活用例

Webアプリケーションでの利用例

実際の開発案件から、具体例を紹介します:

public class UserService {
    public ArrayList<User> getActiveUsers() {
        ArrayList<User> activeUsers = new ArrayList<>();
        
        // DBから取得したユーザーを動的に追加
        while (resultSet.next()) {
            User user = new User(
                resultSet.getString("name"),
                resultSet.getString("email")
            );
            activeUsers.add(user);
        }
        
        return activeUsers;
    }
}

データ処理での活用例

public class DataProcessor {
    public ArrayList<String> filterInvalidData(ArrayList<String> rawData) {
        ArrayList<String> validData = new ArrayList<>();
        
        for (String data : rawData) {
            if (isValid(data)) {
                validData.add(data);
            }
        }
        
        return validData;
    }
}

5. よくあるミスと対策

1. 不適切な初期容量設定

// 悪い例
ArrayList<String> list = new ArrayList<>(1000000); // メモリの無駄遣い

// 良い例
ArrayList<String> list = new ArrayList<>(expectedSize + (expectedSize / 10));

2.非効率な要素削除

// 悪い例(ループ中の要素削除)
for (int i = 0; i < list.size(); i++) {
    if (someCondition) {
        list.remove(i); // インデックスがずれる
    }
}

// 良い例
list.removeIf(element -> someCondition);

まとめ

ArrayListは、その使いやすさと柔軟性から、Javaプログラミングには欠かせないコレクションとなっています。

特に以下の場面でArrayListの使用をお勧めします:

  • 要素数が動的に変化するデータの管理
  • インデックスベースの高速アクセスが必要な場合
  • 要素の追加・削除が主に末尾で行われる場合

次回は「JavaのLinkedListとArrayListの使い分け」について解説する予定です。お楽しみに!

参考情報

  • Java SE Documentation
  • Effective Java 第3版
  • Java Collections Framework
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次