リストが空かどうかを確認する方法は 2 つあります
if (CollectionUtils.isNotEmpty(listName))
と
if (listName != null && listName.size() != 0)
私のアーチは、前者が後者よりも優れていることを教えてくれます。でも私は後者の方がいいと思います。
誰でもそれを明確にしてもらえますか?
リストが空かどうかを確認する方法は 2 つあります
if (CollectionUtils.isNotEmpty(listName))
と
if (listName != null && listName.size() != 0)
私のアーチは、前者が後者よりも優れていることを教えてくれます。でも私は後者の方がいいと思います。
誰でもそれを明確にしてもらえますか?
絶対に使ってくださいisEmpty()
。size()
任意のリストの を計算すると、コストがかかる可能性があります。もちろん、要素があるかどうかを検証するだけでもコストがかかる可能性がありますが、高速化size()
できない最適化はありませんが、逆はそうではありません。isEmpty()
たとえば、サイズをキャッシュしないリンク リスト構造があるとします (ただし、サイズはキャッシュされLinkedList<E>
ます)。次に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())
パフォーマンスの違いに気付くことはありません。どちらの行もまったく同じです。
これが実際に問題になる良い例は、JDK でのConcurrentSkipListSet
実装で、次のように述べられています。
ほとんどのコレクションとは異なり、size メソッドは一定時間の操作ではないことに注意してください。
これは、 がisEmpty()
かどうかをチェックするよりもはるかに効率的な明確なケースsize()==0
です。
一部のコレクションでこれが当てはまる理由は、直感的にわかります。要素をカウントするために全体をトラバースする必要があるような構造の場合、知りたいのが空かどうかだけであれば、最初の構造が見つかったらすぐに停止できます。
isEmpty()
Returns true if this list contains no elements.
http://docs.oracle.com/javase/1.4.2/docs/api/java/util/List.html
私は最初のものを使用します。それが何をするのかすぐにわかるのは明らかです。ここではnullチェックは必要ないと思います。
コレクションが空であることを確認するには、メソッド .count() を使用できます。例:
DBCollection collection = mMongoOperation.getCollection("sequence");
if(collection.count() == 0) {
SequenceId sequenceId = new SequenceId("id", 0);
mMongoOperation.save(sequenceId);
}