TL; DR: utilizza il metodo Iterables.size(Iterable)
di utilità della grande libreria Guava .
Dei tuoi due frammenti di codice, dovresti usare il primo, perché il secondo rimuoverà tutti gli elementi da values
, quindi sarà vuoto in seguito. La modifica di una struttura dati per una query semplice come la sua dimensione è molto inaspettata.
Per le prestazioni, questo dipende dalla struttura dei dati. Se ad esempio è an ArrayList
, rimuovere gli elementi dall'inizio (quello che sta facendo il tuo secondo metodo) è molto lento (il calcolo della dimensione diventa O (n * n) invece di O (n) come dovrebbe essere).
In generale, se esiste la possibilità che values
sia effettivamente un Collection
e non solo un Iterable
, controllare questo e chiamare size()
nel caso:
if (values instanceof Collection<?>) {
return ((Collection<?>)values).size();
}
La chiamata a size()
di solito è molto più veloce di contare il numero di elementi, e questo trucco è esattamente quello Iterables.size(Iterable)
di Guava fa per voi.