import java.util.Date;//重写equals()与hashCode()方法的实例,可以根据对象中真正包括的域成员来比较两个对象是否相等。
public class Cat
{
private String name;
private Date birthday;
public Cat() {
} public void setName(String name) {this.name = name;}
public String getName() {return name;}
public void setBirthday (Date birthday) {this.birthday = birthday;}
public Date getBirthday() {return birthday;} public boolean equals(Object other) {
if(this == other)
return true; if(!(other instanceof Cat))
return false; final Cat cat = (Cat) other; if(!getName().equals(cat.getName()))
return false; if(!getBirthday().equals(cat.getBirthday()))
return false; return true;
} public int hashCode() {
int result = getName().hashCode();
result = 29*result + getBirthday().hashCode();
return result;
}
怎么写一个main()方法来运行这个类java se 的类题
public class Cat
{
private String name;
private Date birthday;
public Cat() {
} public void setName(String name) {this.name = name;}
public String getName() {return name;}
public void setBirthday (Date birthday) {this.birthday = birthday;}
public Date getBirthday() {return birthday;} public boolean equals(Object other) {
if(this == other)
return true; if(!(other instanceof Cat))
return false; final Cat cat = (Cat) other; if(!getName().equals(cat.getName()))
return false; if(!getBirthday().equals(cat.getBirthday()))
return false; return true;
} public int hashCode() {
int result = getName().hashCode();
result = 29*result + getBirthday().hashCode();
return result;
}
怎么写一个main()方法来运行这个类java se 的类题
解决方案 »
- JAVA学了1个月了感觉学不东了..怎么办??
- java语法问题
- 在线游戏系统设计方面的疑问
- 编写一个程序把一个整数数组中的每个元素用逗号连接成一个字符串
- ResourceBundle类中获得资源文件路径问题 在线等 急
- 怎样在jsp/java中调用微软的ActiveX?
- 文本加密后传输问题要从byte转成char,为什么?
- 郁闷啊,我要如何?
- tomcat的安装问题,我在98上安装,是不是在autoexec.bat文件里加两个变量TOMCAT_HOME,JAVA_HOME
- 新手,跪求大神看看,为啥case/那行卡住了,非常感谢
- HttpClient登录百度无法成功,求解决,问题何在?
- 怎样用java做一个自动打开文件的程序?求赐教
Cat c = new Cat();
}
楼主没认真看书
你可以在任何类里面创建一个类来运行该类下的方法。。
楼主的意思应该是怎么在这个类中看效果是吧?
实例化该类,往该类中的Name和Birthday分别添加两次数值,并查看每次添加之后的效果。。
楼主,你先得知道为什么要复写equal和hashcode,给你举个例子
public class Cat {
public static void main(String[] args) {
Date d = new Date();
Cat bigC = new Cat("BigCat", d);
Cat smallC = new Cat("BigCat", d);
System.out.println(bigC == smallC); // 1
System.out.println(bigC.equals(smallC)); // 2
Set<Cat> set = new HashSet<Cat>(); // 3
set.add(bigC);
set.add(smallC);
System.out.println(set.size());
}
这里三个部分:
1、==比较两个cat的地址,两个对象当然返回的false;
2、如果不覆盖equal的话,和==一样的效果,覆盖后,就可以自定义比较内容,这里是比较两个属性,所以返回true。
3、hashcode()是专门用来hash算法的,例如hashMap、hashSet等。此处用hashSet来举例,先会hash定位,定位后再比较equal,如果hashCode()不重写,相等的对象就不能定位在一块了,就会认为是两个不相等的对象。 楼主复写了hashCode后,两个相同的对象add入HashSet,size只有一个,证明两者hashCode相等且equal相等。
正解!建议楼主先明白为什么重写equals方法时要重写hashCode的方法,着重理解容器...
正解!建议楼主先明白为什么重写equals方法时要重写hashCode的方法,着重理解容器... 这跟容器有什么关系?
为什么这么写 hashCode()?