TL; DR: Użyj metody narzędziowej Iterables.size(Iterable)
wielkiej biblioteki Guava .
Z dwóch fragmentów kodu powinieneś użyć pierwszego, ponieważ drugi usunie wszystkie elementy z values
, więc później jest pusty. Zmiana struktury danych dla prostego zapytania, takiego jak jego rozmiar, jest bardzo nieoczekiwana.
Wydajność zależy od struktury danych. Jeśli jest to na przykład w rzeczywistości a ArrayList
, usuwanie elementów od początku (co robi twoja druga metoda) jest bardzo powolne (obliczenie rozmiaru staje się O (n * n) zamiast O (n) tak, jak powinno).
Ogólnie rzecz biorąc, jeśli istnieje szansa, że values
faktycznie jest to a, Collection
a nie tylko Iterable
, sprawdź to i zadzwoń size()
w przypadku:
if (values instanceof Collection<?>) {
return ((Collection<?>)values).size();
}
Wezwanie do size()
woli zwykle znacznie szybciej niż zliczanie liczby elementów, a ten trik jest dokładnie to, co Iterables.size(Iterable)
z Guava robi dla Ciebie.