title: LinkedHashSet Not Removing Duplicates
body: <p>I am trying to create a search algorithm that stores coordinate pairs in a wrapper class called HashSquareSpec. In order to avoid duplicates, and maintain insertion order, I am inserting each HashSquareSpec into a LinkedHashSet. Even though I have overridden the equals() method and hashCode() methods, the LinkedHashSet still accepts two HashSquareSpec objects with
  the same coordinate pairs. </p>
  
  <pre><code>public static void main(String [] args)
  {
      LinkedHashSet&lt;HashSquareSpec&gt; firedShots = new HashLinkedSet&lt;HashSquareSpec&gt;();
      HashSquareSpec a = new HashSquareSpec(1,2);
      HashSquareSpec b = new HashSquareSpec(2,2);
      HashSquareSpec c = new HashSquareSpec(1,2);
      HashSquareSpec d = new HashSquareSpec(3,2);
  
      firedShots.add(a);
      firedShots.add(b);
      firedShots.add(c);
      firedShots.add(d);
      System.out.println(a.equals((SquareSpec)c));
      Iterator l = firedShots.iterator();
      while(l.hasNext())
      {
          System.out.println(l.next().hashCode());
      }
  }
  
  Output:
  true
  38444474
  38474265
  38444474
  38504056
  </code></pre>
  
  <p>HashSquare class</p>
  
  <pre><code>public class HashSquareSpec extends SquareSpec 
  {
    public HashSquareSpec(int sx, int sy) 
    {
      super(sx,sy);
    }
  
    public HashSquareSpec(String codeString) 
    {
      super(codeString);
    }
  
    @Override  
    public int hashCode() 
    {  
      return this.toString().hashCode();  
    }  
  
    public boolean equals(HashSquareSpec other) 
    {
      if(this.toString().equals(other.toString()))
        return true;
      else
        return false;
    }
  }
  </code></pre>
  
  <p>and the super class of HashSquareSpec</p>
  
  <pre><code>public class SquareSpec {
    public int x;
    public int y;
  
    public SquareSpec(int sx, int sy) {
        this.x = sx; 
        this.y = sy;
    }
  
    public SquareSpec(String codeString) {
        this.x = Integer.parseInt(codeString.substring(1,2));
        this.y = Integer.parseInt(codeString.substring(3,4));
    }
  
    public String toString() {
        return("(" + x + "," + y + ")");
    }
  
    public boolean equals(SquareSpec other) {
        return (other.x == this.x  &amp;&amp; 
                other.y == this.y );
      }
    }
  </code></pre>
  
  <p>Despite many different hashCode variations and Eclipse equals and hashCode generation, the
  firedShots data structure keeps accepting duplicates. What is wrong with my code?</p>