package com.java.equals;import java.util.HashMap;/*** 关于HashCode和Equals* @author yfding**/
public class EqualsTest {public static void main(String[] args) {/*** 概念*   equals:判断是否同一个实例,一般需要重写*  ==:判断对象实例的内存地址,判断是否同一个实例,判断实例是否物理相等*  hashcode:使用hash算法,给对象一个唯一的int值,实例的hash码*  */String str1 = new String("yfding");String str2 = new String("yfding");System.out.println(str1==str2);System.out.println(str1.equals(str2)); // return true;虽然指向地址不同,但String重写了equals方法System.out.println(str1.hashCode() + "---" + str2.hashCode()); // 相同,String重写了hashcode方法person p1 = new person(18,"yfding");person p2 = new person(18,"yfding");System.out.println(p1.equals(p2)); // 需重写equals方法,否则返回falseSystem.out.println(p1.hashCode() + "---" + p2.hashCode()); // 需重写hashcode方法,否则返回falseHashMap<person, String> map = new HashMap<person,String>();map.put(p1, "1");map.put(p2, "1");/**Map 集合先判断hashcode,再判断equals,都相同则覆盖,不相同则添加* 如果两个对象相同,那么它们的hashcode一定相同* 如果两个对象的hashcode相同,它们不一定相同* 使用hashcode大大提高了Map集合添加元素的效率,减少了判断equals的次数(hashcode不相同,默认两个实例不相同)*/System.out.println(map.size()); }
}
class person{private int age;private String name;public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public person(int age, String name) {super();this.age = age;this.name = name;}@Overridepublic int hashCode() {final int prime = 31;int result = 1;result = prime * result + age;result = prime * result + ((name == null) ? 0 : name.hashCode());return result;}@Overridepublic boolean equals(Object obj) {if (this == obj)return true;if (obj == null)return false;if (getClass() != obj.getClass())return false;person other = (person) obj;if (age != other.age)return false;if (name == null) {if (other.name != null)return false;} else if (!name.equals(other.name))return false;return true;}
}

关于hashcode和equals方法相关推荐

  1. 理解Java中的hashCode 和 equals 方法

    2019独角兽企业重金招聘Python工程师标准>>> 在Java里面所有的类都直接或者间接的继承了java.lang.Object类,Object类里面提供了11个方法,如下: 1 ...

  2. 为什么使用HashMap需要重写hashcode和equals方法_为什么要重写 hashcode 和 equals 方法?...

    1. 通过Hash算法来了解HashMap对象的高效性 2. 为什么要重写equals和hashCode方法 3. 对面试问题的说明 <Java 2019 超神之路> <Dubbo ...

  3. HashMap存自定义对象为什么要重写 hashcode 和 equals 方法?

    HashMap的k放过自定义对象么? 当我们把自定义对象存入HashMap中时,如果不重写hashcode和equals这两个方法,会得不到预期的结果. class Key{private Integ ...

  4. 为什么要重写 hashcode 和 equals 方法?

    我在面试Java初级开发的时候,经常会问:你有没有重写过hashcode方法?不少候选人直接说没写过.我就想,或许真的没写过,于是就再通过一个问题确认:你在用HashMap的时候,键(Key)部分,有 ...

  5. 为什么使用HashMap需要重写hashcode和equals方法_为什么要重写hashcode和equals方法?你能说清楚了吗...

    我在面试Java初级开发的时候,经常会问:你有没有重写过hashcode方法?不少候选人直接说没写过.我就想,或许真的没写过,于是就再通过一个问题确认:你在用HashMap的时候,键(Key)部分,有 ...

  6. Lombok的@Data生成的hashCode和equals方法坑

    一.场景复现 创建两个lombok的@Data注解的类Pig实例,放进HashMap当key,map里面的数据居然被覆盖了. package com.mk;import lombok.Data; @D ...

  7. Java中hashCode和equals方法的正确使用

    在这篇文章中,我将告诉大家我对hashCode和equals方法的理解.我将讨论他们的默认实现,以及如何正确的重写他们.我也将使用Apache Commons提供的工具包做一个实现. 目录: 1.ha ...

  8. HashMap存储自定义类型键值: 重写HashCode和equals方法

    一个团体作为一个HashMap的key值,若团体成员的姓名年龄相同,则看作key值相同 因为是自定义类,所以需要重写HashCode和equals方法 public class RedVelvet { ...

  9. Java重写hashcode()与equals()方法

    一. hashCode 1. 基本概念 hashCode 是 JDK 根据对象的地址算出来的一个 int 数字(对象的哈希码值),代表了该对象再内存中的存储位置. hashCode() 方法是超级类 ...

  10. 为什么使用HashMap需要重写hashcode和equals方法_java常见面试题敲黑板了,HashMap最全的整理,大厂必考...

    最近几天,在这样的大环境下显得疲惫不堪,但是我还是写下了这篇文章,希望对任何人都有用. HashMap是我们经常用到的数据结构,由数组和链表组成的数据结构如下图所示 上方是一张数组图片,数组里面每个地 ...

最新文章

  1. oracle c 64位系统时间戳,64位系统时间的AOI 架构(64Bit Interpreted AOI)
  2. SVN状态图标不显示
  3. element中有多个合计_深入理解 Flutter 中的 Widget, Element, RenderObject
  4. 售价超16万,全球仅限8台!iPhone 13 Pro冬奥会定制版上架,18K黄金打造
  5. 【Flink】Flink KeyGroupRange {startKeyGroup=7,endKeyGroup=12} does not contain key group 45
  6. 以编程方式在ASP.NET MVC中使用多个HTML Select控件
  7. mysql中创建视图语法错误_mysql - 使用过程MySQL创建视图时出错 - 堆栈内存溢出
  8. C++ 变量初始化规则
  9. 如何防范短信接口被恶意攻击
  10. 上海交通大学出版社python教材答案学生信息管理系统_学生信息管理系统任务书...
  11. 支持向量机(Support Vector Machine,SVM)
  12. 左耳朵耗子:编程的本质是什么?
  13. @PropertySource配置的用法
  14. 女朋友让我深夜十二点催她睡觉,我有Python我就不干
  15. VS 可扩展性开发(九):总结篇
  16. Chrome vimium 插件
  17. Codeforces 417D Cunning Gena(状压DP)
  18. php 远程读取excel,PHP远程读取excel文件,如何读取?
  19. 互联网日报 | 2月1日 星期一 | 苏宁宣布云网万店组织架构;威马汽车完成上市辅导;美团上线医疗健康品牌“百寿健康网”...
  20. win10 桌面图标有一部分显示白纸什么原因?亲测有效

热门文章

  1. CSDN如何上传文件
  2. apriori关联规则
  3. Word文档《Document SAFER 2》
  4. 朱松纯教授浅谈人工智能:现状、任务、构架与统一
  5. 注册双击Ctrl键 (DLL版)
  6. 设置谷歌浏览器和Edge浏览器为黑色背景
  7. 经济实惠:组建P2P电影服务器
  8. (转)开源的大文件上传组件NeatUpload
  9. Unity下载安装教程
  10. 天锐绿盾技术大讲堂:终端出现红色“+”