If Collection defines hasNext() instead of iterator().hasNext(), we could write loop easier:
while(collection.hasNext()){…}
instead of:
Iterator it= collection.iterator();
While(it.hasNext()){…}
Of course, I know easy way for loop for(E e:collection) exists.
Why interface Iterator exists?
That would not be thread safe. The collection would only be able to maintain one “current position” so you couldn’t iterate over it simultaneously in two different threads.
Having iterators allows multiple simultaneous iterating threads that don’t step on each others’ toes.