关于hashcode和equals方法
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方法相关推荐
- 理解Java中的hashCode 和 equals 方法
2019独角兽企业重金招聘Python工程师标准>>> 在Java里面所有的类都直接或者间接的继承了java.lang.Object类,Object类里面提供了11个方法,如下: 1 ...
- 为什么使用HashMap需要重写hashcode和equals方法_为什么要重写 hashcode 和 equals 方法?...
1. 通过Hash算法来了解HashMap对象的高效性 2. 为什么要重写equals和hashCode方法 3. 对面试问题的说明 <Java 2019 超神之路> <Dubbo ...
- HashMap存自定义对象为什么要重写 hashcode 和 equals 方法?
HashMap的k放过自定义对象么? 当我们把自定义对象存入HashMap中时,如果不重写hashcode和equals这两个方法,会得不到预期的结果. class Key{private Integ ...
- 为什么要重写 hashcode 和 equals 方法?
我在面试Java初级开发的时候,经常会问:你有没有重写过hashcode方法?不少候选人直接说没写过.我就想,或许真的没写过,于是就再通过一个问题确认:你在用HashMap的时候,键(Key)部分,有 ...
- 为什么使用HashMap需要重写hashcode和equals方法_为什么要重写hashcode和equals方法?你能说清楚了吗...
我在面试Java初级开发的时候,经常会问:你有没有重写过hashcode方法?不少候选人直接说没写过.我就想,或许真的没写过,于是就再通过一个问题确认:你在用HashMap的时候,键(Key)部分,有 ...
- Lombok的@Data生成的hashCode和equals方法坑
一.场景复现 创建两个lombok的@Data注解的类Pig实例,放进HashMap当key,map里面的数据居然被覆盖了. package com.mk;import lombok.Data; @D ...
- Java中hashCode和equals方法的正确使用
在这篇文章中,我将告诉大家我对hashCode和equals方法的理解.我将讨论他们的默认实现,以及如何正确的重写他们.我也将使用Apache Commons提供的工具包做一个实现. 目录: 1.ha ...
- HashMap存储自定义类型键值: 重写HashCode和equals方法
一个团体作为一个HashMap的key值,若团体成员的姓名年龄相同,则看作key值相同 因为是自定义类,所以需要重写HashCode和equals方法 public class RedVelvet { ...
- Java重写hashcode()与equals()方法
一. hashCode 1. 基本概念 hashCode 是 JDK 根据对象的地址算出来的一个 int 数字(对象的哈希码值),代表了该对象再内存中的存储位置. hashCode() 方法是超级类 ...
- 为什么使用HashMap需要重写hashcode和equals方法_java常见面试题敲黑板了,HashMap最全的整理,大厂必考...
最近几天,在这样的大环境下显得疲惫不堪,但是我还是写下了这篇文章,希望对任何人都有用. HashMap是我们经常用到的数据结构,由数组和链表组成的数据结构如下图所示 上方是一张数组图片,数组里面每个地 ...
最新文章
- oracle c 64位系统时间戳,64位系统时间的AOI 架构(64Bit Interpreted AOI)
- SVN状态图标不显示
- element中有多个合计_深入理解 Flutter 中的 Widget, Element, RenderObject
- 售价超16万,全球仅限8台!iPhone 13 Pro冬奥会定制版上架,18K黄金打造
- 【Flink】Flink KeyGroupRange {startKeyGroup=7,endKeyGroup=12} does not contain key group 45
- 以编程方式在ASP.NET MVC中使用多个HTML Select控件
- mysql中创建视图语法错误_mysql - 使用过程MySQL创建视图时出错 - 堆栈内存溢出
- C++ 变量初始化规则
- 如何防范短信接口被恶意攻击
- 上海交通大学出版社python教材答案学生信息管理系统_学生信息管理系统任务书...
- 支持向量机(Support Vector Machine,SVM)
- 左耳朵耗子:编程的本质是什么?
- @PropertySource配置的用法
- 女朋友让我深夜十二点催她睡觉,我有Python我就不干
- VS 可扩展性开发(九):总结篇
- Chrome vimium 插件
- Codeforces 417D Cunning Gena(状压DP)
- php 远程读取excel,PHP远程读取excel文件,如何读取?
- 互联网日报 | 2月1日 星期一 | 苏宁宣布云网万店组织架构;威马汽车完成上市辅导;美团上线医疗健康品牌“百寿健康网”...
- win10 桌面图标有一部分显示白纸什么原因?亲测有效