黑马程序员技术交流社区
标题:
collection的hashCode()问题求解?
[打印本页]
作者:
罗全涛
时间:
2012-1-2 21:11
标题:
collection的hashCode()问题求解?
本帖最后由 罗全涛 于 2012-1-2 22:14 编辑
public static void main(String[] args) {
// TODO Auto-generated method stub
Collection collections = new ArrayList();
ReflectPoint pt1 = new ReflectPoint(3,3);
ReflectPoint pt2 = new ReflectPoint(3,3);
ReflectPoint pt3 = new ReflectPoint(3,3);
collections.clear();
collections.add(pt1);
collections.add(pt2);
collections.add(pt3);
collections.add(pt1);
System.out.println(pt1==pt2);
System.out.println(pt1.equals(pt2));
System.out.println(pt1==pt3);
System.out.println(pt1.equals(pt3));
System.out.println(collections.size());
System.out.println(pt1.hashCode());
System.out.println(pt2.hashCode());
System.out.println(pt3.hashCode());
}
输出结果:
false
false
false
false
4
12677476
33263331
6413875
问题:
1:查询API上说:int hashCode() 返回此 collection 的哈希码值。
那么对collection对象取hashCode值是每个对象的值吗?还是说根本就没意义?
2:如果有意义,如代码中pt1在collection中插入了两次,问题是当我调用
pt1.hashCode()的值的时候它返回的是哪个的hashCode的值??
作者:
李盈科
时间:
2012-1-2 21:48
首先你创建了三个对象 他们的hashcode()值肯定是不同的,并且如果你没有重写equals()方法所以这里就相当于==号,结果都是false。
第一问:你调用的hashcode()方法调用的是ReflectPoint 继承于Object()你应该也没有重写。这个是是由对象算出来的一个哈希值 。
第二问:你的pt1 只指向了一个对象 所以就返回的是同一个的对象的hashcode()值。
作者:
罗全涛
时间:
2012-1-2 22:14
李盈科 发表于 2012-1-2 21:48
首先你创建了三个对象 他们的hashcode()值肯定是不同的,并且如果你没有重写equals()方法所以这里就相 ...
谢谢哈,想通了,pt1插入collection中虽然插入了两次,但这两个collection元素
指向的对象是同一个对象,而hashCode是根据对象的内存地址算出的,而不是根据
collection元素的地址算出来的。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2