java类的equals()函数和hashCode()函数用法
2024-09-01 06:42:05
以前总觉得java类对象很简单,但是今天的一个同事的点播,让我对java的对象有了不一样的理解,下面我来介绍一下equals()和hashCode()的用法:
先粘一段代码:
public class TestAdd { public static void main(String[] args) {
User u1 = new User("aa","11"); User u2 = new User("aa","11");
Set<User> sets = new HashSet<User>();
sets.add(u1);
sets.add(u2); System.out.println(sets.size());
System.out.println(sets);
}
} class User{
String name;
String password;
User(String name,String password){
this.name=name;
this.password=password;
}
public String toString(){
return "Name :"+name+" "+"Password:"+password;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((name == null) ? 0 : name.hashCode());
result = prime * result
+ ((password == null) ? 0 : password.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
User other = (User) obj;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
if (password == null) {
if (other.password != null)
return false;
} else if (!password.equals(other.password))
return false;
return true;
} }
equals()方法使用来判断其他对象和当前对象是否相等
hashCode()方法是给对象返回一个hashCode值
注:在set集合中,实现对象的去重方法,只需要在User对象中重载equals()和hashCode()函数,在set集合内部会自动是去重。
了解更多set内部去重的问题,请参考http://www.cnblogs.com/Qian123/p/5703507.html
最新文章
- python基础总结篇——使用Mysql
- php中利用正则去掉中文全角空格
- Microsoft Azure云计算第一步—试用帐户申请
- Slony-I中对storelisten出错的处理
- 结合rpyc使用python实现动态升级的方法
- hibernate_validator_07
- cocos2dx 利用CCOrbitCamera实现扑克牌翻牌效果
- ASP文件上传代码
- mybatis mapper.xml 写关联查询 运用 resultmap 结果集中 用 association 关联其他表 并且 用 association 的 select 查询值 报错 java.lang.IllegalArgumentException: Mapped Statements collection does not contain value for mybatis.map
- PyMySQL模块的使用
- bzoj3435 [Wc2014]紫荆花之恋
- CenOS_文件目录类操作命令
- 知识小罐头09(tomcat8启动源码分析 下)
- css table之合并单元格
- 用secureCRT操作ubuntu终端
- php + mysql 分布式事务
- ActiveMQ 概述
- 百度地图地址查询API使用
- 浏览器打印不出div背景颜色
- BZOJ2208:[JSOI2010]连通数——题解