Q:

Why is the iterator method present in both Iterable and Collection interfaces?

The Iterable interface has the method below:
 Iterator<T> iterator();

The Collection interface extends Iterable, and it also declares the same method. 
I am doubtful what was the need of putting the same method declaration twice while designing Java collections?

A:

One possible reason may be the added javadoc making clear what the method is doing. For Collection it is:
/**
 * Returns an iterator over the elements in this collection.  There are no
 * guarantees concerning the order in which the elements are returned
 * (unless this collection is an instance of some class that provides a
 * guarantee).
 *
 * @return an <tt>Iterator</tt> over the elements in this collection
 */

while for Iterable it "only" is:
/**
 * Returns an iterator over elements of type {@code T}.
 *
 * @return an Iterator.
 */

A:

Redefining interface methods is a common practice the allows the sub-interface to refine the contract defined by the super-interface.
Iterable's iterator() returns an iterator over elements of some type.
Collection's iterator() returns an iterator over the elements of the Collection, without guaranteeing order.
List's iterator() returns an iterator over the elements of the List in proper sequence. 
This means that if you implement the iterator() method of some class that implements Collection, you should follow the contract of Collection's iterator(), which is more specific than Iterable's iterator() contract. If your class also implements List, you should follow the even more specific contract of List's iterator().

A:

The main reason is Java 5.
java.util.Collection with its iterator() method and java.util.Iterator exist since Java 1.2.
When they wanted to introduce the enhanced for loop in Java 5 (the one for (String s: ...) {}, they needed a way to create a java.util.Iterator from classes that do not implement java.util.Collection. The decision was made to introduce a new interface java.lang.Iterable that can be implemented by all classes that want to support the enhanced for loop.
To make the existing java.util.Collection and all it's descendent interfaces and classes compatible with the enhanced for loop, they made java.util.Collection extend java.lang.Iterable.
Therefore both interfaces have a method iterator() - java.util.Collection because it was the "first born", java.lang.Iterable for supporting the enhanced for loop.

