Why is there the method iterator() defined on the interface java.util.Collection when it already extends java.util.Iterable which has this very method defined.
I'm thinking some sort of backward compatability or an opportunity to write some JavaDoc on the method at the collection level.
Any other ideas?
Backwards compatibility. Iterable was not introducted until 1.5 with the for(Object o : iterable) construct. Previously, all collections had to provide a means to iterate them.
I suspect it was just to avoid the appearance of removing a method from a documentation point of view. Although javadoc is nice it would be difficult to notice/appreicate a method being moved from one interface to a super-interface.
Note the same was done with Closeable, also introduced in 1.5.
As far as I am aware there would have been no binary compatability issues with removing the method from the Collection class.
Iterable was introduced in 1.5. Since it was part of Collection from before 1.5 that they probably just didn't remove it. And as the other contributor pointed out, it does have better JavaDoc.
I have been doing some more investigation on this and have found that the equals() and hashcode() methods are also overwritten.
Clearly the only reason for this can be to add the javadoc - maybe this is why iterator() was also overwritten.