在学习java中,经常会在容器类,集合类中判断两个对象是否相等,必须要重写equals()方法以及hashcode()方法(哈希码就像身份证一样,是唯一的)。
如判断两个点是否相等并且去掉相同的元素。
package com.collection;
import java.util.HashSet;
public class TestSet {
/**
* param
*/
public static void main(String[ ] args) {
//判断两点是否相等,并且去掉相同的点,
Set pointSet = new HashSet();
Point p1 = new Point(1,1);
Point p2 = new Point(2,2);
Point p3 = new Point(1,1);
Point p4 = new Point(3,3);
pointSet.add(p1);
pointSet.add(p2);
pointSet.add(p3);
pointSet.add(p4);
for (Object o : pointSet) {
Point p = (Point)o;
System.out.println(p.getX() + "," +p.getY());
}
public class Point {
private int x;
private int y;
public Point() {
super();
// TODO Auto-generated constructor stub
}
public Point(int x, int y) {
super();
this.x = x;
this.y = y;
}
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
@Override
public boolean equals(Object obj) { //调用equals方法
// TODO Auto-generated method stub
System.out.println("......"); //测试有没有调用equals()方法
if(obj instanceof Point) {
Point p = (Point)obj;
if(x == p.getX() && y == p.getY()) {
return true;
}else {
return false;
}
}else {
return false;
}
}
@Override
public int hashCode() {
// TODO Auto-generated method stub
return 15 + 12*x + 5*y; //这儿是一个因子,可以随便写。
}
}
}
这个方法在java中比较重要,有兴趣的同学可以共同探讨。