TL; DR: Use o método utilitário Iterables.size(Iterable)da grande biblioteca Guava .
Dos seus dois snippets de código, você deve usar o primeiro, porque o segundo removerá todos os elementos de values , portanto, ele fica vazio depois. Alterar a estrutura de dados de uma consulta simples como seu tamanho é muito inesperado.
Para desempenho, isso depende de sua estrutura de dados. Se for, por exemplo, de fato um ArrayList, remover elementos do início (o que seu segundo método está fazendo) é muito lento (calcular o tamanho torna-se O (n * n) em vez de O (n) como deveria ser).
Em geral, se houver a chance de que valuesseja realmente um Collectione não apenas um Iterable, verifique e chame size()neste caso:
if (values instanceof Collection<?>) {
return ((Collection<?>)values).size();
}
A chamada para size()geralmente será muito mais rápido do que contar o número de elementos, e esse truque é exatamente o Iterables.size(Iterable)de goiaba faz por você.