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码一样
}

  

最新文章

  1. CSS基本知识2-CSS选择
  2. SpringMVC使用@PathVariable,@RequestBody,@ResponseBody,@RequestParam,@InitBinder
  3. Linux运维初级教程(一)Shell脚本
  4. 讨论贴:在sp_executesql 中生成的临时表的可见性
  5. Unity5.3官方VR教程重磅登场-系列2
  6. [转]何时使用委托而不使用接口(C# 编程指南)
  7. tomcat version
  8. Qt之进程间通信(QProcess)
  9. 实例源码--Android简单团购应用源码
  10. CV牛人牛事简介之一
  11. Unity定时器
  12. 队列的实现(JAVA)
  13. js遍历对象的属性并且动态添加属性
  14. vultr新用户注册享受50美元优惠码,长期有效
  15. Python之登录接口
  16. Newtonsoft的序列化和反序列化
  17. PAT L2-011 玩转二叉树
  18. 自定义git忽略规则
  19. 阿里历年经典Java面试题汇总,想进BAT你还不快收藏!
  20. windows服务器开启openssl

热门文章

  1. 刚 安装 Oracle时,登录会出现的问题, ora-28000: the account is locked
  2. APP之构架自己的webapi框架
  3. 下篇: php 微商城 基于Thinkphp3.2框架开发
  4. C++ 知识点总结复习
  5. iOS 5个Xcode开发调试技巧
  6. iOS中self与_的区别
  7. iOSXML &amp; JSON 简介
  8. Eclipse多行同时进行编辑,可编辑或修改相同内容
  9. lesson - 10 shell 基础知识
  10. Create 命令详解