黑马程序员技术交流社区
标题:
hashCode()方法的使用
[打印本页]
作者:
王德云
时间:
2011-11-14 19:30
标题:
hashCode()方法的使用
请问以下代码返回的结果是什么?为什么?
package com.lesson13;
import java.util.HashMap;
public class HashCodeDemo {
public static void main(String[] args) {
HashMap hm = new HashMap();
hm.put(new Person("张三", 20), "张三");
System.out.println(hm.get(new Person("张三", 20)));
}
}
class Person {
private String name;
private int age;
Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "姓名:" + this.name + "年龄:" + this.age;
}
}
复制代码
作者:
郭学文
时间:
2011-11-14 19:40
本帖最后由 郭学文 于 2011-11-14 19:50 编辑
Person p=new Person("张三", 20);
hm.put(p, "张三");
System.out.println(hm.get(p));
你New了两次,已经不是一个对象了
你可覆写一个HashCode 就直接Return 1
让Equalse去干活
作者:
梦女孩
时间:
2011-11-14 19:43
应该是返回null的。hashmap索引根据hashcode查找。如果不实现hashcode方法,那么存于key中的则是Object的hashcode方法返回的地址。
两个新的实例地址自然不会相同。
楼主还实现了一下toString方法,这个很气人。
除非
hm.put(new Person("张三", 20).toString(), "张三");
System.out.println(hm.get(new Person("张三", 20).toString()));
这样才行。
作者:
zhanghua
时间:
2011-11-14 19:43
答案是null
因为你没有覆盖对象的hashCode()和equals()方法,
你要在Person类里面加入这两个方法,这两个方法在工具里可以自动生成,
你在Person类里面右击选择—>source—>Generate hashCode() and equals()
选择Person对象在存放时应该按照那个基本属性进行存储,
你可以选择name
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2