Saturday, September 11, 2010

HashSet does not seem to realize that two objects are the same.

Programmer Question

I'm trying to use HashSet to store objects of a class that I created, but apparently the same objects seem to have two different hashes, which is why the contains method does not realize that the object is already in the HashSet. This leads to my program running out of heap memory.



I don't think I'm doing anything wrong, but I wanted a second opinion anyway. I've done similar operations before which all worked fine, which makes this particularly annoying. I'd appreciate any help.



Here's my code



move1 = new Move(t,s);
if(move1.hashCode()==new Move(t,s).hashCode())
System.out.println("match");
move2 = new Move(s,t);
moves.add(move1);
moves.add(move2);
if(moves.contains(new Move(t,s)))
System.out.println("match found");


Here's the Move class:



public class Move {
private int move1;
private int move2;

Move(int m1, int m2)
{
move1 = m1;
move2 = m2;
}

public String toString()
{
return String.valueOf(move1)+" "+String.valueOf(move2);
}
}


Here's the output I get




Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.util.HashMap.addEntry(HashMap.java:797)
at java.util.HashMap.put(HashMap.java:431)
at java.util.HashSet.add(HashSet.java:194)
at makeMove.(makeMove.java:33)




Find the answer here

No comments:

Post a Comment

LinkWithin

Related Posts with Thumbnails