class DiffHash_DiffEqual extends Base {
public DiffHash_DiffEqual(String s) {
this.s = s;
}
@Override
public int hashCode() {
int hash = 5;
hash = 67 * hash + Objects.hashCode(this.s);
return hash;
}
@Override
public boolean equals(Object obj) {
if (obj == null || getClass() != obj.getClass()) {
return false;
}
final DiffHash_DiffEqual other = (DiffHash_DiffEqual) obj;
return Objects.equals(this.s, other.s);
}
}
class DiffHash_SameEqaul extends Base {
public DiffHash_SameEqaul(String s) {
this.s = s;
}
@Override
public int hashCode() {
int hash = 5;
hash = 67 * hash + Objects.hashCode(this.s);
return hash;
}
@Override
public boolean equals(Object obj) {
return true;
}
}
class SameHash_DiffEqaul extends Base {
public SameHash_DiffEqaul(String s) {
this.s = s;
}
@Override
public int hashCode() {
return 1;
}
@Override
public boolean equals(Object obj) {
if (obj == null || getClass() != obj.getClass()) {
return false;
}
final SameHash_DiffEqaul other = (SameHash_DiffEqaul) obj;
return Objects.equals(this.s, other.s);
}
}
class SameHash_SameEqual extends Base {
public SameHash_SameEqual(String s) {
this.s = s;
}
@Override
public int hashCode() {
return 1;
}
@Override
public boolean equals(Object obj) {
return true;
}
}
class Base {
protected String s;
@Override
public String toString() {
return this.getClass().getSimpleName() + "{" + "s=" + s + '}';
}
}
public class TestHashCodeEqals {
public static void main(String[] args) {
HashMap<DiffHash_DiffEqual, Integer> mapDiffHash_DiffEqual = new HashMap<>();
mapDiffHash_DiffEqual.put(new DiffHash_DiffEqual("aaaaaa"), 1);
mapDiffHash_DiffEqual.put(new DiffHash_DiffEqual("bbbbbb"), 2);
System.out.println("DiffHash_DiffEqual ----------" + mapDiffHash_DiffEqual.keySet().size() );
HashMap<DiffHash_SameEqaul, Integer> mapDiffHash_SameEqaul = new HashMap<>();
mapDiffHash_SameEqaul.put(new DiffHash_SameEqaul("aaaaaa"), 1);
mapDiffHash_SameEqaul.put(new DiffHash_SameEqaul("bbbbbb"), 2);
System.out.println("DiffHash_SameEqaul ----------" + mapDiffHash_SameEqaul.keySet().size() );
HashMap<SameHash_DiffEqaul, Integer> mapSameHash_DiffEqaul = new HashMap<>();
mapSameHash_DiffEqaul.put(new SameHash_DiffEqaul("aaaaaa"), 1);
mapSameHash_DiffEqaul.put(new SameHash_DiffEqaul("bbbbbb"), 2);
System.out.println("SameHash_DiffEqaul ----------" + mapSameHash_DiffEqaul.keySet().size() );
HashMap<SameHash_SameEqual, Integer> mapSameHash_SameEqual = new HashMap<>();
mapSameHash_SameEqual.put(new SameHash_SameEqual("aaaaaa"), 1);
mapSameHash_SameEqual.put(new SameHash_SameEqual("bbbbbb"), 2);
System.out.println("SameHash_SameEqual ----------" + mapSameHash_SameEqual.keySet().size() );
}
}
输出:
DiffHash_DiffEqual ---------- 2 // 两个元素保存在不同内存地址
DiffHash_SameEqaul---------- 2 // 两个元素保存在不同内存地址
SameHash_DiffEqaul ----------2 // 两个元素保存在相同内存地址,构成一个链表
SameHash_SameEqual ---------- 1 //后一个元素替换了前一个元素