web-dev-qa-db-fra.com

Vérifier si une collection est vide en Java: quelle est la meilleure méthode?

J'ai deux moyens de vérifier si une liste est vide ou non

if (CollectionUtils.isNotEmpty(listName)) 

et

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

Mon Arch me dit que le premier est meilleur que le second. Mais je pense que le dernier est meilleur.

Quelqu'un peut-il s'il vous plaît clarifier?

67
Vikrant

Vous devriez absolument utiliser isEmpty(). Le calcul de la size() d'une liste arbitraire peut être coûteux. Même en validant si elle a des éléments can être coûteux, bien sûr, mais il n'y a pas d'optimisation pour size() qui ne peut pas aussi faire isEmpty() plus rapide, alors que l'inverse n'est pas le cas.

Par exemple, supposons que vous ayez une structure de liste chaînée qui non cache la taille (alors que LinkedList<E>fait). Alors, size() deviendrait une opération O(N)), alors que isEmpty() serait toujours O(1).

De plus, bien sûr, utiliser isEmpty() indique ce qui vous intéresse vraiment plus clairement.

130
Jon Skeet

CollectionUtils.isNotEmpty vérifie si votre collection n'est ni nulle ni vide. Cela vaut mieux comparer, mais seulement si vous avez cette bibliothèque Apache dans votre projet. Si vous n'utilisez pas alors:

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

À moins que vous n'utilisiez déjà CollectionUtils, je choisirais List.isEmpty(), moins de dépendances.

Performance sage CollectionUtils sera un peu plus lent. Parce qu’il suit la même logique mais qu’il a des frais généraux supplémentaires.

Il s’agirait donc de lisibilité, performance, dépendances. Pas beaucoup de grande différence cependant.

12
aaa

if (CollectionUtils.isNotEmpty(listName))

Est le même que:

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

Dans la première approche, listName peut être null et aucune exception de pointeur null ne sera levée. En deuxième approche, vous devez vérifier la valeur null manuellement. La première approche est préférable car elle nécessite moins de travail de votre part. Utiliser .size() != 0 est quelque chose d’inutile, j’ai aussi appris qu’il est plus lent que d’utiliser .isEmpty()

9
lxknvlk

Si vous avez les utilitaires communs Apache dans votre projet, utilisez plutôt le premier. Parce que c'est plus court et fait exactement la même chose que le dernier. Il n'y aura pas de différence entre les deux méthodes mais comment cela se présentera dans le code source.

Aussi un chèque vide en utilisant

listName.size() != 0

Est découragé car toutes les implémentations de collection ont le

listName.isEmpty()

fonction qui fait exactement la même chose.

Donc dans l’ensemble, si vous avez quand même les utils communs Apache dans votre chemin de classe, utilisez

if (CollectionUtils.isNotEmpty(listName)) 

dans les autres cas, utilisez

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

Vous ne remarquerez aucune différence de performance. Les deux lignes font exactement la même chose.

7
Nitram

Apache Commons 'CollectionUtils.isNotEmpty (Collection) est un chèque NULL-SAFE

Retourne VRAI si la collection/liste n'est pas vide et non-nulle Retourne FALSE si la collection est nulle

Exemple:

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

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

3
Suren Konathala

Le bon exemple dans la pratique de ceci est le ConcurrentSkipListSet implementation dans le JDK, qui indique:

Attention, contrairement à la plupart des collections, la méthode de la taille n'est pas une opération à temps constant.

Il s'agit clairement d'un cas où isEmpty() est beaucoup plus efficace que de vérifier si size()==0.

Vous pouvez voir pourquoi, intuitivement, cela pourrait être le cas dans certaines collections. Si c'est le genre de structure où vous devez parcourir tout le processus pour compter les éléments, si vous voulez simplement savoir si elle est vide, vous pouvez vous arrêter dès que vous avez trouvé le premier.

1
chiastic-security

Utilisez CollectionUtils.isEmpty (Collection coll)

Null-safe vérifie si la collection spécifiée est vide. Null retourne vrai.

Paramètres: coll - la collection à vérifier peut être nulle

retourne: vrai si vide ou nul

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

Je voudrais utiliser le premier. Il est clair de voir tout de suite ce que ça fait. Je ne pense pas que le contrôle nul est nécessaire ici.

0
Zavior