title: How is Set.toString() implemented?
body: <p>The <code>toString()</code> method is not overridden in <code>Set</code> or its hierarchy, so how are the elements printed?</p>
  
  <pre><code>import java.lang.Math;
  import java.util.HashSet;
  class Hello{
  
  public String name= ""; 
  
  Hello(String name){
  
      this.name = name;   
  
  }
  
  
  public static void main(String args[]){
  
   Hello h1 = new Hello("first");
   Hello h2 = new Hello("second");
   Hello h3 = new Hello("third");
   Hello h4 = new Hello("fourth");
   Hello h5 = new Hello("fourth");
  
   HashSet hs = new HashSet(); 
   hs.add(h1);
   hs.add(h2);
   hs.add(h3);
   hs.add(h4);
   hs.add(h5);
  
   //hs.add(h5);
   //hs.add(null);
  
      System.out.println("elements in hashset"+hs);
        //System.out.println("elements in hashset"+hs.contains());
       //System.out.println("elements in hashset"+hs.contains(new Hello("who")));
      } 
  
      public boolean equals(Object obj){
          System.out.println("In Equals");
          System.out.println(name+"=====equals======"+((Hello)obj).name);
          if(name.equals(((Hello)obj).name))
              return true;
          else
               return false;
      }
  
      public int hashCode(){
          System.out.println("----In Hashcode----"+name); 
          return name.hashCode();
      }
  }
  </code></pre>
  
  <blockquote>
  <pre>Output :----In Hashcode----first
  ----In Hashcode----second
  ----In Hashcode----third
  ----In Hashcode----fourth
  ----In Hashcode----fourth
  In Equals
  fourth=====equals======fourth
  ----In Hashcode----fourth
  ----In Hashcode----second
  ----In Hashcode----third
  ----In Hashcode----first
  elements in hashset[Hello@b4616a1a, Hello@c9
  ]
  </pre>
  </blockquote>
  
  <p>Also When I print hashset the hashcode method is called for each of the elements ?Does it mean the iterator calls this method ?</p>