TL;DR : Utilisez la méthode de l'utilité Iterables.size(Iterable)
du grand Goyave bibliothèque.
De vos deux extraits de code, vous devriez utiliser le premier, car le second supprimera tous les éléments de l'application values
donc il est vide après. Changer une structure de données pour une simple requête comme sa taille est très inattendu.
Pour les performances, cela dépend de votre structure de données. Si, par exemple, il s'agit en fait d'une ArrayList
le retrait d'éléments depuis le début (ce que fait votre deuxième méthode) est très lent (le calcul de la taille devient O(n*n) au lieu de O(n) comme il devrait l'être).
En général, s'il y a une chance que values
est en fait un Collection
et pas seulement un Iterable
Vérifiez ceci et appelez size()
dans le cas :
if (values instanceof Collection<?>) {
return ((Collection<?>)values).size();
}
// use Iterator here...
L'appel à size()
sera généralement beaucoup plus rapide que de compter le nombre d'éléments, et cette astuce est exactement ce qu'il faut faire. Iterables.size(Iterable)
de Goyave fait pour vous.