JavaでCollection
が空かどうかを調べたいとき、あなたはisEmpty()
とsize() == 0
のどちらを使っていますか?
一見どちらも同じように見えますが、可読性やパフォーマンス、そしてベストプラクティスの観点からは明確に違いがあります。
この記事では、Javaの空判定においてなぜisEmpty()
を使うべきかを解説し、現場で役立つ判断基準を提供します。
Collectionの空判定方法:isEmpty()とsize()
JavaのCollection
(List、Setなど)には、空であるかどうかを判定する2つの代表的な方法があります。
// 方法1:isEmpty() を使う
if (collection.isEmpty()) {
// 空のときの処理
}
// 方法2:size() == 0 を使う
if (collection.size() == 0) {
// 空のときの処理
}
どちらも論理的には同じ結果を返しますが、実際の開発現場では、isEmpty()
の使用が推奨されます。なぜでしょうか?
なぜisEmpty()を使うべきなのか?
✅ 1. 意図が明確で読みやすい
isEmpty()
は「空かどうか」を直接的に表現するため、可読性が高く意図が明確です。
if (collection.isEmpty()) // 空であることを直感的に理解できる
一方、size() == 0
は比較式であり、初心者には少しだけ分かりづらい場合があります。
✅ 2. パフォーマンスの観点から安全
isEmpty()
は多くのCollection
実装で高速に処理されるよう最適化されています。
一方で、size()
の実装によっては全要素を走査してカウントする必要があるものも存在します。
例:ConcurrentLinkedQueueの場合
ConcurrentLinkedQueue<String> queue = new ConcurrentLinkedQueue<>();
boolean isEmpty = queue.isEmpty(); // 高速(内部フラグで判断)
boolean isZero = queue.size() == 0; // 全体を走査(コスト高)
特にマルチスレッド環境で使用されるコレクションでは、この違いがパフォーマンスのボトルネックになることがあります。
✅ 3. コーディング規約やレビューでも推奨される
多くのJava開発現場やスタイルガイドでは、isEmpty()
の使用がベストプラクティスとされています。
コードレビューでも「size() == 0
より isEmpty()
を使ってください」と指摘されることがよくあります。
nullチェックと組み合わせるパターン
実務では、Collection
がnull
かどうかを併せてチェックしたい場面が多くあります。
そのようなときも、以下のようにisEmpty()
を使った方が読みやすく、意図も明確です。
if (collection == null || collection.isEmpty()) {
// nullまたは空の場合の処理
}
size() を使うべきケースはある?
もちろん、size()
にも役割はあります。
例えば、コレクション内の要素数を表示したい、サイズに応じた条件分岐をしたい場合などにはsize()
が必要です。
if (list.size() >= 5) {
// 5件以上の処理
}
しかし、「空であるかどうか」のみを判定したいときにsize()
を使うのは冗長で非効率と考えられます。
まとめ:空判定にはisEmpty()を使おう
isEmpty()
は意図が明確で読みやすく、パフォーマンスにも優れる- Javaのベストプラクティスとしても
isEmpty()
が広く推奨されている
今後、Javaで空判定を行う際には、迷わずisEmpty()
を使いましょう。