TL; DR: Utilice el método Iterables.size(Iterable)
de utilidad de la gran biblioteca de Guava .
De sus dos fragmentos de código, debe usar el primero, porque el segundo eliminará todos los elementos de values
, por lo que estará vacío después. Cambiar una estructura de datos para una consulta simple como su tamaño es muy inesperado.
Para el rendimiento, esto depende de su estructura de datos. Si es, por ejemplo, de hecho an ArrayList
, eliminar elementos desde el principio (lo que está haciendo su segundo método) es muy lento (calcular el tamaño se convierte en O (n * n) en lugar de O (n) como debería ser).
En general, si existe la posibilidad de que en values
realidad sea un Collection
y no solo un Iterable
, verifique esto y llame size()
en caso de que:
if (values instanceof Collection<?>) {
return ((Collection<?>)values).size();
}
La llamada a la size()
voluntad general será mucho más rápido que contar el número de elementos, y este truco es exactamente lo que Iterables.size(Iterable)
de guayaba hace por usted.