A.java
package com.peng.hashequal; public class A { @Override public boolean equals(Object obj) { System.out.println("判断equals"); return false; } @Override public int hashCode() { System.out.println("判断hashcode"); return 1; } }TestA.java
package com.peng.hashequal; import java.util.HashMap; import java.util.Map; /* * hashCode返回1,当第一次插入时判断hashcode没有相同的,所以直接插入 * 当插入第二个时先判断hsshcode由于自定义的hashcode返回的值都是1,所以就 * 接着判断equals是否相等,由于定义的equals返回false,所以不相等,所以输出 * HashMap的大小为2 */ public class TestA { public static void main(String[] args) { Map<A,Object> map=new HashMap<A,Object>(); map.put(new A(), new Object()); map.put(new A(), new Object()); System.out.println(map.size()); } }输出:
B.java
package com.peng.hashequal; public class B { @Override public boolean equals(Object obj) { System.out.println("判断equals"); return true; } @Override public int hashCode() { System.out.println("判断hashcode"); return 1; } }TestB.java
package com.peng.hashequal; import java.util.HashMap; import java.util.Map; /* * hashCode返回1,当第一次插入时判断hashcode没有相同的,所以直接插入 * 当插入第二个时先判断hsshcode由于自定义的hashcode返回的值都是1,所以就 * 接着判断equals是否相等,由于定义的equals返回true,所以相等,不能插入,所以输出 * HashMap的大小为1 */ public class TestB { public static void main(String[] args) { Map<B,Object> map=new HashMap<B,Object>(); map.put(new B(), new Object()); map.put(new B(), new Object()); System.out.println(map.size()); } }输出
