この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:4
ページ更新者:T
更新日時:2026-06-11 07:07:02

タイトル: リスト要素数の取得
SEOタイトル: Java リスト要素数の取得(size メソッド / 配列の length / ArrayList / 空判定 / Stream count)

この記事の要点
  • Java で List 系コレクションの要素数を取得するには size() メソッドを使う
  • 配列 (int[] 等) はメソッドではなくフィールド: arr.length
  • 空判定は list.isEmpty() が高速かつ可読性が高い (size() == 0 より推奨)
  • Stream では count() で要素数を取得 — ただし戻り値は long
  • null チェック必須 — list が null の場合 NullPointerException

Java で要素数を取得する方法

Java のコレクション (List / Set / Map) と配列では、要素数の取得方法が異なります。コレクションは size() メソッド、配列は length フィールド。混同しがちなので注意。

List.size() — 基本構文

import java.util.ArrayList;
import java.util.List;

List list1 = new ArrayList<>();
list1.add("a");
list1.add("b");
list1.add("c");

System.out.println(list1.size());
// 出力: 3

List.of() で初期化したリスト

// Java 9+
List list = List.of("a", "b", "c");
System.out.println(list.size());   // 3

// List.of は不変リストを返す。add() 等は UnsupportedOperationException

配列の length

配列はメソッドではなくフィールドです。括弧を付けません。

int[] nums = {10, 20, 30, 40, 50};
System.out.println(nums.length);   // 5

String[] names = new String[10];
System.out.println(names.length);  // 10 (全要素 null だが length は 10)

// 多次元配列の長さ
int[][] grid = new int[3][5];
System.out.println(grid.length);       // 3 (行数)
System.out.println(grid[0].length);    // 5 (列数)

size() と length の使い分け早見表

対象取得方法戻り値
配列 (int[] など)arr.lengthint
Stringstr.length()int (文字数)
List / Setlist.size()int
Mapmap.size()int (キー数)
Streamstream.count()long
Collection (インターフェース)collection.size()int

空判定は isEmpty() を使う

size() == 0 よりも isEmpty()推奨です。可読性が高く、一部の実装ではより高速。

List list = new ArrayList<>();

// 推奨
if (list.isEmpty()) {
    System.out.println("空です");
}

// 非推奨 (動くが冗長)
if (list.size() == 0) {
    System.out.println("空です");
}

// LinkedList などでは size() が O(1) でない実装もある (現代の JDK は O(1) だが)

null チェック

リスト自体が null だと size() 呼び出しで NullPointerException が発生します。

List list = null;

// NG
// int n = list.size();   // NullPointerException

// 安全な書き方
if (list != null && !list.isEmpty()) {
    // 処理
}

// Java 11+
import java.util.Objects;
if (!Objects.requireNonNullElse(list, List.of()).isEmpty()) {
    // ...
}

// Collections.emptyList() で null を避ける設計
List safe = list != null ? list : Collections.emptyList();
int n = safe.size();

Stream の count()

Stream API では count() で要素数を取得します。戻り値は long なので注意。条件フィルタとの組み合わせが強力。

import java.util.List;

List nums = List.of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);

// 全体の数
long total = nums.stream().count();
System.out.println(total);   // 10

// 偶数の数
long evens = nums.stream()
                 .filter(n -> n % 2 == 0)
                 .count();
System.out.println(evens);   // 5

// 文字列の長さでフィルタ
List words = List.of("apple", "banana", "cherry", "fig");
long longWords = words.stream()
                      .filter(w -> w.length() > 4)
                      .count();
System.out.println(longWords);   // 3 (apple, banana, cherry)

Map の要素数

import java.util.HashMap;
import java.util.Map;

Map map = new HashMap<>();
map.put("a", 1);
map.put("b", 2);
map.put("c", 3);

System.out.println(map.size());   // 3 (キー数)
System.out.println(map.keySet().size());     // 3
System.out.println(map.values().size());     // 3 (重複あっても全カウント)

パフォーマンス特性

実装size() 計算量
ArrayListO(1)
LinkedListO(1) (内部カウントを保持)
HashMap / HashSetO(1)
ConcurrentHashMapO(n) の場合あり (並行更新中)
Stream.count()O(n) (要素を走査)

FAQ

Q: なぜ配列だけ length でメソッドじゃないのか
A: 配列は Java の言語仕様レベルのオブジェクトで、length は特殊なフィールド扱い。互換性のため変更されていない。

Q: String の文字数を size() で取れない
A: String は length() メソッド。Java の歴史的経緯で配列の length と紛らわしいが、こちらはメソッド (括弧あり)。

Q: size() と Stream.count() どちらが速い?
A: コレクションがあるなら必ず size()。Stream は中間操作を遅延評価のため、count() はそれらを走査する必要があり遅い。

関連

  • リスト要素の更新 (Python 版)
  • ArrayList / LinkedList の違い
  • Collections / Stream API
  • String.length() vs char[].length