重写equals 和 hashCode

xiaoxiao2021-02-28  8

重要: 使用HashMap时候, 作为key类, 必须合理重写hashCode() 和 equals, 否则会引用HashMap各种故障!!! package day05; public class Point {  private int x, y;  public Point(int x, int y) {   this.x = x;   this.y = y;  }  public boolean equals(Object obj) {   if(obj==null) return false;   if(obj==this) return true;   if (obj instanceof Point) {    Point other = (Point) obj;    return x==other.x && other.y==y;   }   return false;  }  public int hashCode(){   return x*1000+y;  }  public String toString() {   return "("+x+","+y+")";  } } @Test public void testHashMap2(){     /*      * 测试使用Point作为Map的key      * Point已经合理的实现了hashCode和equals方法      * 此时 HashMap的各种功能都会正常了!!!      */     Point p1 = new Point(3, 4);     Point p2 = new Point(3, 4);     Point p3 = new Point(4, 3);     Point p4 = new Point(7, 8);     System.out.println(p1.hashCode());//3004     System.out.println(p2.hashCode());//3004     System.out.println(p3.hashCode());//4003     System.out.println(p4.hashCode());//7008     System.out.println(p1.equals(p2));//true     System.out.println(p1.equals(p3));//false     System.out.println(p1.equals(p4));//false     Map<Point, String> map =         new HashMap<Point, String>();     map.put(p1, "p1");     map.put(p2, "p2");     map.put(p3, "p3");     map.put(p4, "p4");     //这个结果说明: p1和p2作为相同的key     // 不能重复添加到map, 此时工作正常!!!     System.out.println(map);//{(3,4)=p2, (7,8)=p4, (4,3)=p3}     //p1.x = 8;     map.put(p1, "p1");     System.out.println(map);//{(3,4)=p1, (7,8)=p4, (4,3)=p3}     System.out.println(map.get(p2));//p1 }
转载请注明原文地址: https://www.6miu.com/read-750310.html

最新回复(0)