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)
з гуави робить для вас.