equals和hashcode重写的问题
public static void main(String[] args) {
		Set<Test> set = new HashSet<>();
		Test t1 = new Test("aaa");
		Test t2 = new Test("aaa");
		set.add(t1);
		set.add(t2);
		System.out.println(set.size());
		//我们对于equals方法已经很熟了,这里就不说了
		//t1.equals(t2)   == true
		//如果Test没有重写hashcode方法     set.size()  ->  2
		//如果Test重写了hashcode方法        set.size()  ->  1
		//原因:
			//在集合中,判断两个对象是否相等的规则是:
	    	//第一步,如果hashCode()相等,则查看第二步,否则不相等;
	         //第二步,查看equals()是否相等,如果相等,则两obj相等,否则还是不相等
		//hashcode源码分析:String类的
			//实际上它是遍历了字符串的里面的所有字符,根据每个字符的ASCII码值进行遍历计算,关于那个固定值为什么是31,应该取这个值效率较高,可重复性较低
			/*public int hashCode() {
	        int h = hash;
	        if (h == 0 && value.length > 0) {
	            char val[] = value;
	            for (int i = 0; i < value.length; i++) {
	                h = 31 * h + val[i];
	            }
	            hash = h;
	        }
	        return h;*/
		//equals源码分析:string类
			//这个相信大家都看过,遍历字符串里的所有字符,然后逐一进行比较,只要有不相同的就return false
		//所以
			//equals相同的两个对象,其hashcode码一定相同,因为hashcode码就是根据值去算的
			//两个对象的hashcode码相同,可能存在偶然的情况,字符串不同,算出的hashcode码一样
	}
equals和hashcode重写的问题的更多相关文章
- Java--equals和 == 的比较和equals()、HashCode()的重写
		一. equals和 == 的比较 1.== 运算符 ① == 如果比较的是基本数据类型,则比较的是值. ② == 如果比较的是引用数据类型,则比较的是地址值. 2.equals ①它属于java.l ... 
- 为什么重写equals时必须重写hashCode方法?
		原文地址:http://www.cnblogs.com/shenliang123/archive/2012/04/16/2452206.html 首先我们先来看下String类的源码:可以发现Stri ... 
- Java中==、equals、hashcode的区别与重写equals以及hashcode方法实例(转)
		Java中==.equals.hashcode的区别与重写equals以及hashcode方法实例 原文地址:http://www.cnblogs.com/luankun0214/p/4421770 ... 
- 【转】Java中==、equals、hashcode的区别与重写equals以及hashcode方法实例
		原文地址:http://www.cnblogs.com/luankun0214/p/4421770.html 感谢网友的分享,记录下来只为学习. 1.重写equals方法实例 部分代码参考http ... 
- 为什么重写equals方法还要重写hashcode方法?
		我们都知道Java语言是完全面向对象的,在java中,所有的对象都是继承于Object类.Ojbect类中有两个方法equals.hashCode,这两个方法都是用来比较两个对象是否相等的. 在未重写 ... 
- 重写equals()与hashCode()方法
		出自:http://blog.csdn.net/renfufei/article/details/16339351 Java语言是完全面向对象的,在java中,所有的对象都是继承于Object类.Oj ... 
- 为什么重写equals时必须重写hashCode方法?(转发+整理)
		为什么重写equals时必须重写hashCode方法? 原文地址:http://www.cnblogs.com/shenliang123/archive/2012/04/16/2452206.html ... 
- 为什么重写 equals 方法 必须重写 hashCode
		自己学到这,就记录了下来,代码都是自己敲得,有不对的地方希望大神指点出来 为什么重写 equals 方法 必须重写 hashCode 如果你重写了equals,比如说是基于对象的内容实现的,而不重写 ... 
- 重写equals就必须重写hashCode的原理分析
		因为最近在整理Java集合的源码, 所以今天再来谈谈这个古老的话题,因为后面讲HashMap会用到这个知识点, 所以重新梳理下. 如果不被重写(原生Object)的hashCode和equals是什么 ... 
随机推荐
- 为什么还坚持.NET? 找一门适合自己的语言去做编程
			为什么还坚持.NET? 找一门适合自己的语言去做编程 接触了.NET快十二年了,现在专注于分布式服务的开发. 中间经历过各种编程语言的诱惑,ios等. 前几年才对自己有比较明确的定位 技术上:找到适合 ... 
- python爬虫小结1
			先看正则化,正则化就是描述命令和字符切分.查找.筛选等功能的方便方式. http://www.cnblogs.com/fnng/archive/2013/05/20/3089816.html 一个游戏 ... 
- UML2和建模工具学习总结
			软件发展的方向:CS–>BS–>SOA–>BIG DATA 建模的含义: 模型是对现实的简化 从特点视角对系统的一个完整性描述 建模的重要性: 为了更好的理解一个系统 管理复杂度(也 ... 
- Solr集群搭建详细教程(二)
			注:欢迎大家转载,非商业用途请在醒目位置注明本文链接和作者名dijia478,商业用途请联系本人dijia478@163.com. 之前步骤:Solr集群搭建详细教程(一) 三.solr集群搭建 注意 ... 
- layui动态设置下拉框数据,根据后台数据设置选中
			追加下拉框数据: 设置默认选中: 正常的判断这种情况是不行的,因为追加出的数据,在前台显示的并不是同一个下拉框,原来的下拉框被隐藏了 因此需要:根据原来的位置,寻找下一个节点,寻找子节点的方式找到相应 ... 
- linux使用freetds 连接连远程服务器sqlservser2012
			1.下载:freetds-patched.tar.gz http://www.freetds.org/software.html http://www.freetds.org/userguide/c ... 
- iOS UIAlertController中加入倒计时,输入框,Swift讲解
			一.倒计时 @interface ViewController () { UIAlertController *alertview; NSString * message; NSTimer * wai ... 
- iOS开发富文本制作 图片和文字/NSMutableParagraphStyle/NSMutableAttributedString
			/NSMutableParagraphStyle/NSMutableAttributedString 组合使 NSString * titlestr=@"日产GT-R"; NSMu ... 
- JAVA 实现tail -f 日志文件监控功能
			工具: <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</ar ... 
- 小白的Python之路 day4  迭代器
			迭代器 学习前,我们回想一下可以直接作用于for循环的数据类型有以下几种: 1.集合数据类型,如list.tuple.dict.set.str等: 2.是generator,包括生成器和带yield的 ... 
