web-dev-qa-db-ja.com

Javaでコレクションが空かどうかを確認する:最適な方法はどれですか?

リストが空かどうかを確認する方法は2つあります

if (CollectionUtils.isNotEmpty(listName)) 

そして

if (listName != null && listName.size() != 0)

私のArchは、前者の方が後者よりも優れていると言っています。しかし、後者の方が優れていると思います。

誰でもそれを明確にすることができますか?

67
Vikrant

絶対isEmpty()を使用する必要があります。任意のリストのsize()を計算すると、費用がかかる可能性があります。要素があるかどうかを検証することもできますcan高価ですが、もちろんsize()の最適化はありません()isEmpty()を高速化できません、逆はそうではありません。

たとえば、did n'tサイズをキャッシュするリンクリスト構造があるとします(一方、LinkedList<E>does)。 size()はO(N)操作になりますが、isEmpty()O(1)のままです。

さらに、isEmpty()を使用すると、実際に興味のあるものがより明確に示されます。

130
Jon Skeet

CollectionUtils.isNotEmptyは、コレクションがnullでも空でもないかどうかをチェックします。これは、プロジェクトにこのApacheライブラリがある場合にのみ、ダブルチェックと比較した方が適切です。使用しない場合:

if(list != null && !list.isEmpty())
53
alexey28

既にCollectionUtilsを使用していない限り、List.isEmpty()を使用して依存関係を減らします。

パフォーマンスに関するCollectionUtilsは、少し遅くなります。基本的に同じロジックに従いますが、追加のオーバーヘッドがあるためです。

したがって、読みやすさ、パフォーマンス、依存関係の違いになります。ただし、それほど大きな違いはありません。

12
aaa

if (CollectionUtils.isNotEmpty(listName))

次と同じです:

if(listName != null && !listName.isEmpty())

最初のアプローチでは、listNameをnullにすることができ、nullポインター例外はスローされません。 2番目のアプローチでは、nullを手動で確認する必要があります。最初のアプローチは、あなたからの作業が少なくて済むため、より良い方法です。 .size() != 0を使用することはまったく不要です。また、.isEmpty()を使用するよりも遅いこともわかりました。

9
lxknvlk

プロジェクトにApache共通ユーティリティがある場合は、最初のユーティリティを使用してください。短いため、後者とまったく同じです。両方の方法に違いはありませんが、ソースコード内での表示方法は異なります。

また、空のチェックを使用して

listName.size() != 0

すべてのコレクションの実装には

listName.isEmpty()

まったく同じことを行う機能。

結局のところ、クラスパスにApache共通ユーティリティが含まれている場合は、

if (CollectionUtils.isNotEmpty(listName)) 

その他の場合には使用

if(listName != null && listName.isEmpty())

パフォーマンスに違いはありません。両方の行はまったく同じです。

7
Nitram

Apache CommonsのCollectionUtils.isNotEmpty(Collection)はNULL-SAFEチェックです

コレクション/リストが空ではなく、nullでない場合はTRUEを返します。コレクションがNullの場合はFALSEを返します

例:

List<String> properties = new ArrayList();
...
if (CollectionUtils.isNotEmpty(properties)) {
  // process the list
} else {
 // list is null or empty
}

参照: https://commons.Apache.org/proper/commons-collections/apidocs/org/Apache/commons/collections4/CollectionUtils.html#isNotEmpty(Java.util.Collection)

3
Suren Konathala

これが実際に問題になる場所の良い例は、JDKの ConcurrentSkipListSet implementation です。

ほとんどのコレクションとは異なり、サイズメソッドは一定時間の操作ではないことに注意してください。

これは、isEmpty()size()==0であるかどうかをチェックするよりもはるかに効率的な明確なケースです。

直観的には、これが一部のコレクションに当てはまる理由を確認できます。要素を数えるためにすべてを横断する必要がある構造の場合、空かどうかだけを知りたい場合は、最初の要素が見つかったらすぐに停止できます。

1

CollectionUtils.isEmpty(Collection coll)を使用します

指定されたコレクションが空かどうかのヌルセーフチェック。 Nullはtrueを返します。

パラメータ: coll-チェックするコレクション。nullの場合がある

戻り値:空またはnullの場合はtrue

1
Ash
isEmpty()

      Returns true if this list contains no elements.

http://docs.Oracle.com/javase/1.4.2/docs/api/Java/util/List.html

0
user278064

最初のものを使用します。それが何をするのかすぐにわかるのは明らかです。ここでは、nullチェックが必要だとは思わない。

0
Zavior