不重写hash不重写equals造成的问题
不重写hash造成的问题
第一,就是不重写,调用object 的hashCode方法,用的是地址,
比如现在你map.put() 10000个对象,这时候对象都是不同的地址,计算出不同的对应的桶位置(数组位置),
这时候相当于你的 hashmap 都没用到链表和红黑树, 就会造成比如内存溢出,
然后还破坏了hashmap 本来应有的效率和设计的初衷。
重写了之后,计算出的可能会是相同的桶位置,进行链表。
第二,hashset 的去重,首先是比较hashcode,再比较equals,,如果不重写hashCode,就不能去重啊,可能就不符合自身的业务。
不重写equals
第一,会造成比如相同姓名的人,认为是相同的人, so应该重写equals 根据姓名+身份证号组合去判断
第二 小王在「堆」中有两套房产,这两套房产位于不同的地址。现在我想要判断这两套房子是否是同一个主人?
于是我去问Object,而Object告诉我这两套房产不是一个人的!
我:为什么呢?
Object: equals告诉我两套房子离了十万八千里,在不同的地方(地址),当然不是同一个人了。
我:这逻辑……(不符合我们常规的认知啊)
既然这样,那我只能重写equals了!
//注意:这是伪代码,省略了很多
//重写equals,认为身份证相同就是同一个人
@Override
public boolean equals(Object obj) {
return this.idCard == obj.idCard;
}
哈哈,好啦,现在equals终于知道这两个房子是同一人的啦!
不重写hash不重写equals造成的问题的更多相关文章
- 为什么要重写hashcode方法和equals方法
我们可能经常听到说重写equals方法必须重写hashcode方法,这是为什么呢?java中所有的类都是Object的子类,直接上object源码 /* * Copyright (c) 1994, 2 ...
- 为什么要重写hashCode()方法和equals()方法及如何重写
我想写的问题有三个: 1.首先我们为什么需要重写hashCode()方法和equals()方法 2.在什么情况下需要重写hashCode()方法和equals()方法 3.如何重写这两个方法 **** ...
- hash值重写,就是以自己定义的规则来显示hash值
未重写hashCode值 重写hashCode后的值
- Java 重写hashCode 方法和equals方法
package Container; import java.util.HashSet; import java.util.Iterator; /* Set 元素是无序的(存入和取出的顺序不一定一致) ...
- Java之面向对象例子(三) 多态,重写,重载,equals()方法和toString()方法的重写
重写(继承关系) 子类得成员方法和父类的成员方法,方法名,参数类型,参数个数完全相同,这就是子类的方法重写了父类的方法. 重载 在一个类里有两个方法,方法名是完全一样的,参数类型或参数个数不同. 例子 ...
- 如何重写Java中的equals方法
Java中,只有8种基本类型不是对象,例如:4种整形类型(byte, short, int,long),2种浮点类型(flout, double),boolean, char不是对象,其他的所有类型, ...
- 正确重写hashcode hashcode与equals方法 集合元素如何判断是否相等 集合如何查看是否包含某个元素
首先记住两句话 相等的两个对象,即equals(Object)方法判断两个对象相等,那么他们必须要有相同的hashcode hashcode相同的两个对象,他们可能相同,也可能不相同 简单地说可以这么 ...
- JAVA基础之——三大特征、接口和抽象类区别、重载和重写区别、==和equals区别、JAVA自动装箱和拆箱
1 java三大特征 1)封装:即class,把一类实体定义成类,该类有变量和方法. 2)继承:从已有的父类中派生出子类,子类实现父类的抽象方法. 3)多态:通过父类对象可以引用不同的子类,从而实现不 ...
- 重写Object类里equals方法
package com.fff; public class Pet { private String name; private int age; public Pet(String nume,int ...
随机推荐
- 多个UID为0的用户如何实现root用户的免密
文章目录 创建用户 创建用户密码 免密脚本 当前主机用户不是root 当前主机用户是root,远程主机多个用户uid为0 利用shell脚本实现远程主机uid为0的用户只有root一个 多个UID=0 ...
- MYSQL数据表损坏的原因分析和修复方法小结
MYSQL数据表损坏的原因分析和修复方法小结 1.表损坏的原因分析 以下原因是导致mysql 表毁坏的常见原因: 1. 服务器突然断电导致数据文件损坏. 2. 强制关机,没有先关闭mysql 服务. ...
- logstash获取nginx日志的配置
nginx部分配置直接用json,省去很多麻烦 log_format json '{"@timestamp":"$time_iso8601",' '" ...
- web安全之备份
1:打开界面,一头雾水.根据题目提示"备份是个好习惯"可以想到,这应该是一个代码泄露问题.常见的网页主页index.php.那么备份文件一般是.bak文件类型.尝试下载该文件 in ...
- RFC2889——拥塞控制测试
一.简介 RFC 2889为LAN交换设备的基准测试提供了方法学,它将RFC 2544中为网络互联设备基准测试所定义的方法学扩展到了交换设备,提供了交换机转发性能(Forwarding Perform ...
- 三大流行BI分析平台推荐,企业数据化选择工具
进入大数据时代以来,对于企业来说,海量的数据不仅是财富,也是负担.无论是大型企业还是小型企业,都面临着同样的挑战--如何利用大数据客户体验,有效达到优化生产力的效果.这也是近年来许多企业选择搭建现代大 ...
- 用商业智能BI做出来的报表,甩别人一条街!
同样是做数据分析的,会商业智能BI的人做的报表都比别人好看.这里所说的好看其实是包括了两个意义,一是排版.色彩搭配等,颜值上的好看:二是把数据分析结果展现地直观易懂上的"好看".想 ...
- Linux 网络时间同步
Linux的时间分为System Clock(系统时间)和Real Time Clock (硬件时间,简称RTC). 系统时间:指当前Linux Kernel中的时间. 硬件时间:主板上有电池供电的时 ...
- 【C#TAP 异步编程】构造函数 OOP
原文:异步 OOP 2:构造函数 (stephencleary.com) 异步构造带来了一个有趣的问题.能够在构造函数中使用会很有用,但这意味着构造函数必须返回一个表示将来将构造的值,而不是构造的值. ...
- LayUI使用注意
# layui获取.修改checkbox的值 <input type="checkbox" name="MySwitch" value="x&q ...