TL; DR: используйте служебный метод Iterables.size(Iterable)
великой библиотеки Guava .
Из ваших двух фрагментов кода вы должны использовать первый, потому что второй удалит все элементы values
, поэтому впоследствии он будет пустым. Изменение структуры данных для простого запроса, например его размера, является очень неожиданным.
Для производительности это зависит от вашей структуры данных. Если это, например, на самом деле ArrayList
, удаление элементов с самого начала (что делает ваш второй метод) очень медленное (вычисление размера становится O (n * n) вместо O (n), как должно быть).
В общем, если есть вероятность, что values
это действительно a, Collection
а не только Iterable
, проверьте это и позвоните size()
в случае:
if (values instanceof Collection<?>) {
return ((Collection<?>)values).size();
}
Вызов size()
, как правило, гораздо быстрее , чем подсчет количества элементов, и этот трюк именно Iterables.size(Iterable)
из гуавы делает для вас.