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?
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.
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())
À 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.
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()
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.
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
}
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.
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
isEmpty()
Returns true if this list contains no elements.
http://docs.Oracle.com/javase/1.4.2/docs/api/Java/util/List.html
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.