TL; DR: Використовуйте метод корисності Iterables.size(Iterable)великої бібліотеки Гуави .
З ваших двох фрагментів коду ви повинні використовувати перший, оскільки другий видалить усі елементи values, тому він порожній. Зміна структури даних для такого простого запиту, як його розмір, є дуже несподіваною.
Для продуктивності це залежить від вашої структури даних. Якщо це, наприклад, насправді an ArrayList, видалення елементів з самого початку (що робить ваш другий метод) відбувається дуже повільно (обчислення розміру стає O (n * n) замість O (n), як це повинно бути).
Загалом, якщо є ймовірність, що valuesнасправді є, Collectionа не лише Iterable, перевірте це та зателефонуйте size()на випадок:
if (values instanceof Collection<?>) {
return ((Collection<?>)values).size();
}
Виклик size(), як правило, набагато швидше , ніж підрахунок кількості елементів, і цей трюк саме Iterables.size(Iterable)з гуави робить для вас.