title: why iterator.remove() has been described as optional operation?
body: <p>I went through the documentation(<a href="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html" rel="noreferrer">http://java.sun.com/javase/6/docs/api/java/util/Iterator.html</a>) of <code>Iterator.remove()</code>
  there <code>remove(</code>) was described as  </p>
  
  <pre><code>void remove()
  </code></pre>
  
  <blockquote>
    <p>Removes from the underlying collection the last element returned
    by the iterator (optional operation).
    This method can be called only once
    per call to next. The behavior of an
    iterator is unspecified if the
    underlying collection is modified
    while the iteration is in progress in
    any way other than by calling this
    method.</p>
  </blockquote>
  
  <ol>
  <li>So can anybody tell what "optional" means.</li>
  <li>Does this affect the robustness of operation?(Like c++ ,it does not guarantee the robustness of the operations.)</li>
  <li>Why "optional" has been specified categorically here. </li>
  <li>What does "modification" mean in the second line of documentation </li>
  </ol>
  
  <blockquote>
    <p>behavior of an iterator is unspecified if the underlying collection is modified</p>
  </blockquote>