Is there a “computationally” quick way to get the count of an iterator?
int i = 0;
for ( ; some_iterator.hasNext() ; ++i ) some_iterator.next();
… seems like a waste of CPU cycles.
Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.
Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.
Lost your password? Please enter your email address. You will receive a link and will create a new password via email.
Please briefly explain why you feel this question should be reported.
Please briefly explain why you feel this answer should be reported.
Please briefly explain why you feel this user should be reported.
If you’ve just got the iterator then that’s what you’ll have to do – it doesn’t know how many items it’s got left to iterate over, so you can’t query it for that result. There are utility methods that will seem to do this efficiently (such as
Iterators.size()in Guava), but underneath they’re just consuming the iterator and counting as they go, the same as in your example.However, many iterators come from collections, which you can often query for their size. And if it’s a user made class you’re getting the iterator for, you could look to provide a size() method on that class.
In short, in the situation where you only have the iterator then there’s no better way, but much more often than not you have access to the underlying collection or object from which you may be able to get the size directly.