リストが空かどうかを確認する方法は2つあります
if (CollectionUtils.isNotEmpty(listName))
そして
if (listName != null && listName.size() != 0)
私のArchは、前者の方が後者よりも優れていると言っています。しかし、後者の方が優れていると思います。
誰でもそれを明確にすることができますか?
絶対isEmpty()
を使用する必要があります。任意のリストのsize()
を計算すると、費用がかかる可能性があります。要素があるかどうかを検証することもできますcan高価ですが、もちろんsize()
の最適化はありません()isEmpty()
を高速化できません、逆はそうではありません。
たとえば、did n'tサイズをキャッシュするリンクリスト構造があるとします(一方、LinkedList<E>
does)。 size()
はO(N)操作になりますが、isEmpty()
はO(1)
のままです。
さらに、isEmpty()
を使用すると、実際に興味のあるものがより明確に示されます。
CollectionUtils.isNotEmpty
は、コレクションがnullでも空でもないかどうかをチェックします。これは、プロジェクトにこのApacheライブラリがある場合にのみ、ダブルチェックと比較した方が適切です。使用しない場合:
if(list != null && !list.isEmpty())
既にCollectionUtilsを使用していない限り、List.isEmpty()
を使用して依存関係を減らします。
パフォーマンスに関するCollectionUtilsは、少し遅くなります。基本的に同じロジックに従いますが、追加のオーバーヘッドがあるためです。
したがって、読みやすさ、パフォーマンス、依存関係の違いになります。ただし、それほど大きな違いはありません。
if (CollectionUtils.isNotEmpty(listName))
次と同じです:
if(listName != null && !listName.isEmpty())
最初のアプローチでは、listName
をnullにすることができ、nullポインター例外はスローされません。 2番目のアプローチでは、nullを手動で確認する必要があります。最初のアプローチは、あなたからの作業が少なくて済むため、より良い方法です。 .size() != 0
を使用することはまったく不要です。また、.isEmpty()
を使用するよりも遅いこともわかりました。
プロジェクトにApache共通ユーティリティがある場合は、最初のユーティリティを使用してください。短いため、後者とまったく同じです。両方の方法に違いはありませんが、ソースコード内での表示方法は異なります。
また、空のチェックを使用して
listName.size() != 0
すべてのコレクションの実装には
listName.isEmpty()
まったく同じことを行う機能。
結局のところ、クラスパスにApache共通ユーティリティが含まれている場合は、
if (CollectionUtils.isNotEmpty(listName))
その他の場合には使用
if(listName != null && listName.isEmpty())
パフォーマンスに違いはありません。両方の行はまったく同じです。
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
}
これが実際に問題になる場所の良い例は、JDKの ConcurrentSkipListSet
implementation です。
ほとんどのコレクションとは異なり、サイズメソッドは一定時間の操作ではないことに注意してください。
これは、isEmpty()
がsize()==0
であるかどうかをチェックするよりもはるかに効率的な明確なケースです。
直観的には、これが一部のコレクションに当てはまる理由を確認できます。要素を数えるためにすべてを横断する必要がある構造の場合、空かどうかだけを知りたい場合は、最初の要素が見つかったらすぐに停止できます。
CollectionUtils.isEmpty(Collection coll)を使用します
指定されたコレクションが空かどうかのヌルセーフチェック。 Nullはtrueを返します。
パラメータ: coll-チェックするコレクション。nullの場合がある
戻り値:空またはnullの場合はtrue
isEmpty()
Returns true if this list contains no elements.
http://docs.Oracle.com/javase/1.4.2/docs/api/Java/util/List.html
最初のものを使用します。それが何をするのかすぐにわかるのは明らかです。ここでは、nullチェックが必要だとは思わない。