黑马程序员技术交流社区

标题: 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