[EMAIL PROTECTED] wrote: [ ... ]
The reason is because HashMap only compares the hashCodes of the objects and never consults equals.[ ... ]
This is not the case. HashMap uses equals() when the hashCode() of two objects are the same. If you want good performance it is a good idea to have the hashCode() different or at least evenly distributed. However, it is not necessary. As a test, try the following code:
import java.util.*;
public class HashMapThing
{
private static class Key
{
private int hashCode;
private String content;
private String tag; public Key(int hashCode, String content, String tag)
{
this.hashCode = hashCode;
this.content = content;
this.tag = tag;
} public int hashCode()
{
System.out.println("hashCode() called on " + toString());
return hashCode;
}public boolean equals(Object o)
{
System.out.println("equals() called on " + toString()
+ ", " + o.toString());
if (o instanceof Key) {
Key other = (Key) o;
return this.content.equals(other.content);
}
else {
return false;
}
}
public String toString()
{
return "tag: \"" + tag
+ "\" code: " + hashCode
+ " content: \"" + content + "\"";
}
}
public static void main(String[] args) throws Exception
{
Key entryA = new Key(0, "0", "A");
Key entryB = new Key(0, "0", "B");
Key entryC = new Key(0, "1", "C"); System.out.println("Adding entries:");
Map map = new HashMap();
System.out.println("A");
map.put(entryA, "1");
System.out.println("B");
map.put(entryB, "2");
System.out.println("C");
map.put(entryC, "3"); System.out.println("\nGetting entries:");
String out1 = (String) map.get(entryA);
String out2 = (String) map.get(entryC); System.out.println("\nEntries:");
System.out.println("1: " + out1);
System.out.println("2: " + out2);
}
}-- Mike
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
