title: Violation of single responsibility principle in Iterator from Java core
body: <p>Why <a href="http://docs.oracle.com/javase/8/docs/api/java/util/Iterator.html" rel="nofollow noreferrer"><code>java.util.Iterator</code></a> interface has method <code>remove()</code>? </p>
  
  <p>Certainly sometimes this method is necessary and all have become accustomed to its presence. But in fact the main and only objective of the iterator is just to provide access container elements. And when someone wants to create his own implementation for this interface, and cannot or does not want for any reason to provide the ability to remove an element, then he is forced to throw <code>UnsupportedOperationException</code>. And throwing of that exception usually indicates a not too well thought out architecture or some flaws in design.</p>
  
  <p>Really I don't understand the reasons for such a decision. And I guess it would be more correctly separate a specific subinterface to support the optional method:</p>
  
  <p><a href="https://i.stack.imgur.com/HhiBR.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/HhiBR.png" alt="diagram"></a></p>
  
  <p>Any reasoned versions why <code>remove()</code> is part of the <code>Iterator</code>? Is not this example of a direct violation of the single responsibility principle from <a href="https://en.wikipedia.org/wiki/SOLID_(object-oriented_design)" rel="nofollow noreferrer"><code>SOLID</code></a>?</p>