TL; DR: Sử dụng phương thức tiện ích Iterables.size(Iterable)
của thư viện Guava tuyệt vời .
Trong số hai đoạn mã của bạn, bạn nên sử dụng đoạn mã đầu tiên, vì đoạn mã thứ hai sẽ xóa tất cả các phần tử khỏi đó values
, vì vậy nó sẽ trống sau đó. Thay đổi cấu trúc dữ liệu cho một truy vấn đơn giản như kích thước của nó là rất bất ngờ.
Đối với hiệu suất, điều này phụ thuộc vào cấu trúc dữ liệu của bạn. Nếu nó là ví dụ trong thực tế ArrayList
, việc loại bỏ các phần tử ngay từ đầu (phương pháp thứ hai của bạn đang làm) rất chậm (tính toán kích thước trở thành O (n * n) thay vì O (n) như nó phải như vậy).
Nói chung, nếu có cơ hội values
thực sự là một Collection
và không chỉ là một Iterable
, hãy kiểm tra điều này và gọi size()
trong trường hợp:
if (values instanceof Collection<?>) {
return ((Collection<?>)values).size();
}
Các cuộc gọi đến size()
thường sẽ được nhanh hơn nhiều so với đếm số lượng các yếu tố, và thủ thuật này là chính xác những gì Iterables.size(Iterable)
của Ổi làm cho bạn.