89

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

if (CollectionUtils.isNotEmpty(listName)) 

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

私のアーチは、前者が後者よりも優れていることを教えてくれます。でも私は後者の方がいいと思います。

誰でもそれを明確にしてもらえますか?

4

12 に答える 12

149

絶対に使ってくださいisEmpty()size()任意のリストの を計算すると、コストがかかる可能性があります。もちろん、要素があるかどうかを検証するだけでもコストがかかる可能性がありますが、高速化size()できない最適化はありませんが、逆はそうではありません。isEmpty()

たとえば、サイズをキャッシュしないリンク リスト構造があるとします (ただし、サイズはキャッシュされLinkedList<E> ます)。次にsize()、O(N) 操作にisEmpty()なりますが、それでもO(1).

さらにもちろん、isEmpty()あなたが実際に興味を持っていることをより明確に示します。

于 2012-06-22T08:23:55.837 に答える
66

CollectionUtils.isNotEmptyコレクションがnullでも空でもないかどうかを確認します。これはダブルチェックよりも優れていますが、プロジェクトにこの Apache ライブラリがある場合に限ります。使用しない場合:

if(list != null && !list.isEmpty())
于 2012-06-22T08:21:14.430 に答える
12

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

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

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

于 2012-06-22T08:21:12.017 に答える
11

if (CollectionUtils.isNotEmpty(listName))

以下と同じです:

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

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

于 2015-07-06T09:05:43.337 に答える
7

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

を使用した空のチェックも

listName.size() != 0

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

listName.isEmpty()

まったく同じことを行う関数。

全体として、とにかくクラスパスにApache共通ユーティリティがある場合は、使用します

if (CollectionUtils.isNotEmpty(listName)) 

それ以外の場合は使用

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

パフォーマンスの違いに気付くことはありません。どちらの行もまったく同じです。

于 2012-06-22T08:24:53.183 に答える
1

これが実際に問題になる良い例は、JDK でのConcurrentSkipListSet実装で、次のように述べられています。

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

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

一部のコレクションでこれが当てはまる理由は、直感的にわかります。要素をカウントするために全体をトラバースする必要があるような構造の場合、知りたいのが空かどうかだけであれば、最初の構造が見つかったらすぐに停止できます。

于 2014-12-17T12:33:33.120 に答える
1
isEmpty()

      Returns true if this list contains no elements.

http://docs.oracle.com/javase/1.4.2/docs/api/java/util/List.html

于 2012-06-22T08:19:35.603 に答える
0

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

于 2012-06-22T08:19:41.427 に答える
-7

コレクションが空であることを確認するには、メソッド .count() を使用できます。例:

DBCollection collection = mMongoOperation.getCollection("sequence");
    if(collection.count() == 0) {
        SequenceId sequenceId = new SequenceId("id", 0);
        mMongoOperation.save(sequenceId);
    }
于 2016-02-03T04:42:39.470 に答える