Midiendo el rendimiento de rutinas



Estos días me ha tocado revisar código hecho por otros, y encontré un par de rutinas que me parecieron interesantes para revisar. Estas las publiqué en la cuenta de twitter:


He recibido respuestas interesantes.

Lo que publicaré en este post y en un vídeo es ver cuál es la rutina más rápida, en base a sus respuestas.

Validando que una lista no esté vacía

He creado una clase Utils con tres métodos que validará que una lista no esté vacía. La primera es la manera como encontré en el código, la segunda y la tercera es usando sus respuestas.

    public static boolean isValidListIf(List<?> list) {
        if (list != null) {
            if (list.size() > 0) {
                return true;
            } else {
                return false;
            }
        } else {
            return false;
        }
    }

    public static boolean isValidListInline(List<?> list) {
        return list != null && !list.isEmpty();
    }

    public static boolean isValidListOptional(List<?> list) {
        return Optional.ofNullable(list).map((l) -> !l.isEmpty()).orElse(Boolean.FALSE);
    }

¿Cuál cree que es más rápido?

Validando que una cadena no esté vacía

Esta también es similar, solo que se asegura que no tenga espacios en blanco. Igual, tendremos tres métodos:
    public static boolean isValidStringIf(String str) {
        if (str != null) {
            if (str.trim().length() > 0) {
                return true;
            } else {
                return false;
            }
        } else {
            return false;
        }
    }

    public static boolean isValidStringInLine(String str) {
        return str != null && !str.trim().isEmpty();
    }

    public static boolean isValidStringOption(String str) {
        return Optional.ofNullable(str).map(s -> !s.trim().isEmpty()).orElse(Boolean.FALSE);
    }

Vídeo

Aquí veremos el código en ejecución y veremos el resultado, además daremos un veredicto ¿cuál crees que es el resultado?


Código fuente

Aquí publico el código fuente para que también lo intentes y pruebas en tu máquina:

Comentarios

  1. Gracias por el artículo, ¿Pudieras actualizarlo pero ejecutando las pruebas con JMH?. JMH esta bastante bueno y tiene un API que permite configurar los tipos de pruebas. Yo lo estuve usando siguiendo lo documentado aquí http://tutorials.jenkov.com/java-performance/jmh.html

    ResponderBorrar
  2. Hola S8k!
    De hecho, hace unos años hice una publicación usando lo que mencionas.

    https://www.apuntesdejava.com/2015/12/midiendo-el-rendimiento-con-jmh-java.html

    ResponderBorrar
  3. Buenas,

    Me gustaría añadir a tu foro este aporte.
    Para comprobar si una lista es vacía suelo usar la CollectionUtils.

    org.apache.commons.collections4.CollectionUtils;
    CollectionUtils.isNotEmpty(list) esto te hace la comprobación de null y si es vacía.

    Para cadenas uso esta:
    StringUtils.isNotBlank(cadena)

    Código más limpio y fácil de leer.

    Saludos.

    ResponderBorrar

Publicar un comentario

Si quieres hacer una pregunta más específica, hazla en los foros que tenemos habilitados en Google Groups


Ah! solo se permiten comentarios de usuarios registrados. Si tienes OpenID, bienvenido! Puedes obtener su OpenID, aquí: http://openid.net/

Entradas más populares de este blog

UML en NetBeans

Cambiar ícono a un JFrame

Portales en Java