ejemplo java collections is-empty

jlabel java ejemplo



Comprobar si una colección está vacía en Java: ¿cuál es el mejor método? (11)

Tengo dos formas de verificar si una lista está vacía o no

if (CollectionUtils.isNotEmpty(listName))

y

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

Mi arco me dice que lo primero es mejor que lo segundo. Pero creo que este último es mejor.

¿Alguien puede por favor aclararlo?


A menos que ya esté utilizando CollectionUtils, iría a List.isEmpty() , menos dependencias.

En cuanto al rendimiento, CollectionUtils será un poco más lento. Porque básicamente sigue la misma lógica pero tiene una sobrecarga adicional.

Entonces sería legibilidad vs. desempeño vs. dependencias. Aunque no hay mucha diferencia.


CollectionUtils.isNotEmpty de Apache Commons ''(Collection) es un cheque NULL-SAFE

Devuelve VERDADERO si la Colección / Lista no está vacía y no es nula Devuelve FALSO si la Colección es Nula

Ejemplo:

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

Consulte: https://commons.apache.org/proper/commons-collections/apidocs/org/apache/commons/collections4/CollectionUtils.html#isNotEmpty(java.util.Collection)


Para comprobar que la recopilación está vacía, puede utilizar el método: .count (). Ejemplo:

DBCollection collection = mMongoOperation.getCollection("sequence"); if(collection.count() == 0) { SequenceId sequenceId = new SequenceId("id", 0); mMongoOperation.save(sequenceId); }


Si tiene las utilidades comunes de Apache en su proyecto, use la primera. Porque es más corto y hace exactamente lo mismo que este último. No habrá ninguna diferencia entre los dos métodos, sino cómo se ve dentro del código fuente.

También un cheque vacío usando

listName.size() != 0

Se desalienta porque todas las implementaciones de colección tienen la

listName.isEmpty()

Función que hace exactamente lo mismo.

Así que en general, si tiene los utils comunes de Apache en su ruta de clase de todos modos, use

if (CollectionUtils.isNotEmpty(listName))

en cualquier otro caso usar

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

Usted no notará ninguna diferencia de rendimiento. Ambas líneas hacen exactamente lo mismo.


Un buen ejemplo de lo que importa en la práctica es la implementación ConcurrentSkipListSet en el JDK, que establece:

Tenga en cuenta que, a diferencia de la mayoría de las colecciones, el método de tamaño no es una operación de tiempo constante.

Este es un caso claro en el que isEmpty() es mucho más eficiente que verificar si size()==0 .

Puede ver por qué, intuitivamente, este podría ser el caso en algunas colecciones. Si es el tipo de estructura donde tiene que atravesar todo para contar los elementos, si lo único que quiere saber es si está vacío, puede detenerse tan pronto como encuentre la primera.


Use CollectionUtils.isEmpty (Colección coll)

Comprobación nula segura si la colección especificada está vacía. Null devuelve true.

Parámetros: coll - la colección a verificar, puede ser nula

Devuelve: verdadero si está vacío o nulo


Yo usaría el primero. Está claro ver de inmediato lo que hace. No creo que el cheque nulo sea necesario aquí.


CollectionUtils.isNotEmpty comprueba si su colección no es nula y no está vacía. Esto es mejor en comparación con la verificación doble, pero solo si tiene esta biblioteca de Apache en su proyecto. Si no lo hace, utilice:

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


if (CollectionUtils.isNotEmpty(listName))

Es lo mismo que:

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

En el primer enfoque, listName puede ser nulo y no se lanzará la excepción de puntero nulo. En la segunda aproximación hay que verificar el valor nulo manualmente. El primer enfoque es mejor porque requiere menos trabajo de usted. Usar .size() != 0 es algo innecesario, también aprendí que es más lento que usar .isEmpty()


Absolutamente debe utilizar isEmpty() . Calcular el size() de una lista arbitraria podría ser costoso. Por supuesto, incluso validar si tiene algún elemento puede ser costoso, pero no hay optimización para el size() que tampoco puede hacer que isEmpty() más rápido, mientras que no es así lo contrario.

Por ejemplo, suponga que tiene una estructura de lista vinculada que no almacena en caché el tamaño (mientras que LinkedList<E> tiene ). Entonces size() se convertiría en una operación O (N), mientras que isEmpty() aún sería O(1) .

Además, por supuesto, usar isEmpty() indica en qué estás realmente interesado.