Ich habe zwei Möglichkeiten zu überprüfen, ob eine Liste leer ist oder nicht
if (CollectionUtils.isNotEmpty(listName))
und
if (listName != null && listName.size() != 0)
Mein Bogen sagt mir, dass Ersteres besser ist als Letzteres. Aber ich denke, letzteres ist besser.
Kann jemand bitte klarstellen?
java
collections
is-empty
Vikrant
quelle
quelle
listname.isEmpty()
?isEmpty
ist eine Methode in der Sammlung SchnittstelleAntworten:
Sie sollten unbedingt verwenden
isEmpty()
. Das Berechnensize()
einer beliebigen Liste kann teuer sein. Auch die Validierung , ob es irgendwelche Elemente hat können teuer sein, natürlich, aber es gibt keine Optimierung fürsize()
welche nicht , kann auch machenisEmpty()
schneller, während dies umgekehrt nicht der Fall ist.Angenommen, Sie hatten eine verknüpfte Listenstruktur, die die Größe nicht zwischengespeichert hat (wohingegen dies der
LinkedList<E>
Fall ist ). Dannsize()
würde eine O (N) -Operation werden, währendisEmpty()
dies immer noch der Fall wäreO(1)
.Darüber hinaus können Sie natürlich
isEmpty()
klarer angeben , woran Sie tatsächlich interessiert sind.quelle
List.size()==0
vsList.isEmpty()
Performance korrekt ist, beantwortet dies nicht die Frage bezüglich der Verwendung von Apache Commons-SammlungenCollectionUtils.isEmpty
oderCollectionUtils.isNotEmpty()
isEmpty
alsreturn size() == 0;
.CollectionUtils.isNotEmpty
prüft, ob Ihre Sammlung nicht null und nicht leer ist. Dies ist besser als eine doppelte Überprüfung, aber nur, wenn Sie diese Apache-Bibliothek in Ihrem Projekt haben. Wenn Sie dies nicht tun, verwenden Sie:if(list != null && !list.isEmpty())
quelle
CollectionUtils.isEmpty
(oderCollectionUtils.isNotEmpty
) besteht darin, dass Ihreif
Bedingung weniger Verzweigungen aufweist, sodass es einfacher ist, in Ihren Tests eine gute Verzweigungsabdeckung zu erreichen. Zum Beispiel meldet Sonarqube bestenfalls eine Abdeckung von 75%,if (list==null || list.isEmpty())
weil Sie keine Liste haben können, die null und nicht gleichzeitig leer ist.Wenn Sie CollectionUtils nicht bereits verwenden, würde ich
List.isEmpty()
weniger Abhängigkeiten anstreben.In Bezug auf die Leistung wird CollectionUtils etwas langsamer. Weil es im Grunde der gleichen Logik folgt, aber zusätzlichen Overhead hat.
Es wäre also Lesbarkeit vs. Leistung vs. Abhängigkeiten. Kein großer Unterschied.
quelle
if (CollectionUtils.isNotEmpty(listName))
Ist das gleiche wie:
if(listName != null && !listName.isEmpty())
Im ersten Ansatz
listName
kann null sein und eine Nullzeigerausnahme wird nicht ausgelöst. Im zweiten Ansatz müssen Sie manuell nach Null suchen. Der erste Ansatz ist besser, weil Sie weniger Arbeit benötigen. Verwenden.size() != 0
ist überhaupt etwas Unnötiges, außerdem habe ich gelernt, dass es langsamer ist als Verwenden.isEmpty()
quelle
Wenn Sie die allgemeinen Apache-Dienstprogramme in Ihrem Projekt haben, verwenden Sie lieber das erste. Weil es kürzer ist und genau das gleiche tut wie das letztere. Es wird keinen Unterschied zwischen beiden Methoden geben, aber wie es im Quellcode aussieht.
Auch ein leerer Scheck mit
listName.size() != 0
Wird davon abgeraten, da alle Sammlungsimplementierungen die
Funktion, die genau das gleiche tut.
Alles in allem sollten Sie also verwenden, wenn Sie die allgemeinen Apache-Dienstprogramme in Ihrem Klassenpfad haben
if (CollectionUtils.isNotEmpty(listName))
in jedem anderen Fall verwenden
if(listName != null && listName.isEmpty())
Sie werden keinen Leistungsunterschied feststellen. Beide Zeilen machen genau das gleiche.
quelle
size()
Methode O (n) ist. Es wird allgemein erwartet, dass alleisEmpty()
Implementierungen O (1) sein werden.Die CollectionUtils.isNotEmpty (Collection) von Apache Commons ist eine NULL-SAFE-Prüfung
Rückgabe TRUE ist die Sammlung / Liste ist nicht leer und nicht null. Gibt FALSE zurück, wenn die Sammlung Null ist
Beispiel:
List<String> properties = new ArrayList(); ... if (CollectionUtils.isNotEmpty(properties)) { // process the list } else { // list is null or empty }
Siehe: https://commons.apache.org/proper/commons-collections/apidocs/org/apache/commons/collections4/CollectionUtils.html#isNotEmpty(java.util.Collection)
quelle
Ein gutes Beispiel dafür, wo dies in der Praxis wichtig ist, ist die
ConcurrentSkipListSet
Implementierung im JDK, in der es heißt:Dies ist ein klarer Fall, bei dem
isEmpty()
es viel effizienter ist, zu prüfen, obsize()==0
.Sie können intuitiv erkennen, warum dies in einigen Sammlungen der Fall sein kann. Wenn es sich um eine Struktur handelt, in der Sie das Ganze durchlaufen müssen, um die Elemente zu zählen, können Sie anhalten, sobald Sie die erste gefunden haben, wenn Sie nur wissen möchten, ob sie leer ist.
quelle
Verwenden Sie CollectionUtils.isEmpty (Collection coll)
Nullsichere Prüfung, ob die angegebene Sammlung leer ist. Null gibt true zurück.
Parameter: coll - Die zu überprüfende Sammlung kann null sein
Rückgabe: true, wenn leer oder null
quelle
isEmpty() Returns true if this list contains no elements.
http://docs.oracle.com/javase/1.4.2/docs/api/java/util/List.html
quelle
Ich würde den ersten benutzen. Es ist klar, sofort zu sehen, was es tut. Ich denke nicht, dass die Nullprüfung hier notwendig ist.
quelle
Um zu überprüfen, ob die Sammlung leer ist, können Sie die folgende Methode verwenden: .count (). Beispiel:
DBCollection collection = mMongoOperation.getCollection("sequence"); if(collection.count() == 0) { SequenceId sequenceId = new SequenceId("id", 0); mMongoOperation.save(sequenceId); }
quelle