本帖最后由 聂斌 于 2013-3-26 19:51 编辑
public class ReflectPoint {
private int x;
public int y;
public String str1 = "ball";
public String str2 = "basketball";
public String str3 = "itcast";
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
ReflectPoint other = (ReflectPoint) obj;
if (x != other.x)
return false;
if (y != other.y)
return false;
return true;
}
public ReflectPoint(int x, int y) {
this.x = x;
this.y = y;
}
}
Collection collections = new HashSet();
ReflectPoint pt1 = new ReflectPoint(3,3);
ReflectPoint pt2 = new ReflectPoint(5,5);
ReflectPoint pt3 = new ReflectPoint(3,3);
collections.add(pt1);
collections.add(pt2);
collections.add(pt3);
collections.add(pt1);
System.out.println(collections.size());
输出:3
老师的代码中是没有重写hashcode()方法的,j结果是3,,我的理解是最后一个pt1l是没有放进集合中的,,,,但是我看老师说的讲解是这样的:
视频26,,时间第12:00分钟开始,,,
下面是老师的话语:
虽然pt1和pt3使用equsal()方法(重写equals方法)比较是相等了,但是你算出来的hashcode值是按照内存地址值算的,他们2个的内存地址值不一样,这2个本来该认为是相同的对象,分别被存放到了不同的区域当中(pt1__1区域,,pt3__2),.....当我要去找这个对象pt3时,我在我这个2区域里面找,不在1区域里找,虽然那个1区域确实有个和我相同的对象pt1,但是我没有去1区域里找,,所以pt3就没有放进去,,
问题:
老师说的话我始终无法理解,,为什么老师会说pt3没有放进去呢,,,当我写代码验证时pt3放进集合中了,,是最后一个pt1没有放进去,,,,老师说的话大家怎么理解,,我一直想不通,,,郁闷了好久,,
我明白pt1和pt3使用equsal()方法 他们是相等的,那么Pt3就不会放进集合中,,,但是我通过下面代码2验证时发现pt3放进去了是最后一个pt1没有放进去,,
代码2:
Collection collections = new HashSet();
ReflectPoint pt1 = new ReflectPoint(3,3);
ReflectPoint pt2 = new ReflectPoint(5,5);
ReflectPoint pt3 = new ReflectPoint(3,3);
// System.out.println(pt1.equals(pt3));
// System.out.println(pt1.equals(pt1));
System.out.println(pt1);
System.out.println(pt2);
System.out.println(pt3);
collections.add(pt1);
collections.add(pt2);
collections.add(pt3);
collections.add(pt1);
System.out.println( pt1== pt1);
System.out.println(collections);
System.out.println( pt1.equals(pt1));
System.out.println(collections.size());
输出:
june26.ReflectPoint@c17164
june26.ReflectPoint@1fb8ee3
june26.ReflectPoint@61de33
true
[june26.ReflectPoint@1fb8ee3, june26.ReflectPoint@c17164, june26.ReflectPoint@61de33]
true
3
在这里想听听大家对老师的原话理解,,,, 就是视频26,,时间第12:00分钟开始到14;00分钟,,
|
|