hashcode、equals和==简单总结
1, ==是比较句柄,若ob1==ob2,也就是两个句柄指向一个对象。所以ob1.hashcode()==ob2.hashcode()和ob1.equals(ob2) == true;
2,hashcode相同的两个对象,ob1.equals(ob2)不一定为true;ob1.equals(ob2)为true的两个对象,hashcode应该相同。即覆写equals方法时应同时覆写hashcode方法
3,hashcode一般用到HashSet,HashMap中,根据hashcode来确定存储位置,如果hashcode相同,再用equals来判断Set中的唯一性。
HashMap中put方法的源代码是:
public V put(K key, V value) {
if (key == null)
return putForNullKey(value);
int hash = hash(key.hashCode());
int i = indexFor(hash, table.length);
for (Entry<K,V> e = table[i]; e != null; e = e.next) {
Object k;
if (e.hash == hash && ((k = e.key) == key || key.equals(k))) {
V oldValue = e.value;
e.value = value;
e.recordAccess(this);
return oldValue;
}
}
modCount++;
addEntry(hash, key, value, i);
return null;
}
看e.hash == hash && ((k = e.key) == key || key.equals(k))这句,即先判定hashcode是否相同,再判断equals是否为true
转载于:https://blog.51cto.com/jianshusoft/697702
hashcode、equals和==简单总结相关推荐
- ==和equals的简单比较
前言:==和equals这个两个东西,经常放在一块做比较,下面我也给出一个简单的例子,对他俩进行一个简单的比较,先看例子,然后在看结论.(实验环境:win7+jdk7) 1:==和equals简单比较 ...
- Java 基础复习实践 --- Hashcode Equals
虽然很多知识点书籍都有整理,但是记性总是不好,所以决定将一些细小容易混淆的概念,通过简单的 Demo 实践,加深复习.特此开一个坑,坚持就是胜利. 本章内容主要为了理解以下几个知识点: equals( ...
- Java 的toString() 和 equals()函数简单介绍
toString() 和 equals() 都是java面试中经常问到的地方. 特别是1条经典问题: equals 和 "==" 的区别... 本文就从简单介绍下这两个objec ...
- day15:hash值、Set(hashCode(),equals())、HashSet、LinkedHashSet、TreeSet、Map(keySet,entry(get.set)、HashMap
一 回顾 1.集合的分类:单列集合 Collection 双列集合 Map 2.Collection 四大all的方法 3.List 特点: 有序 有索引 可以重复四个带索引操作的方法 4.Array ...
- 你为什么要关心equals和hashcode
等于和哈希码是每个Java对象的基本元素. 它们的正确性和性能对于您的应用程序至关重要. 但是,我们经常看到甚至有经验的程序员都忽略了类开发的这一部分. 在本文中,我将介绍一些与这两种非常基本的方法有 ...
- IntelliJ IDEA:使用Google Guava生成equals,hashCode和toString
问题 在Java领域,我们经常需要编写equals , hashCode和toString方法. 老实说,这通常只是一个样板义务. 得益于智能IDE,我们通常不再自己这样做. 我们只是让和IDE一起努 ...
- 学习Java编程equals()和hashCode()方法
equals()和hashCode()区别? equals():反映的是对象或变量具体的值,即两个对象里面包含的值--可能是对象的引用,也可能是值类型的值. hashCode():计算出对象实例的哈希 ...
- equals和==和hashcode的恩怨情仇
一.前言: equals和==和hashcode是java中的基础中的基础,但是确实容易被问到,而且因为工作中经常用所以很容易在复习时遗漏掉,这几天面了个大厂就在这个问题上翻车了,不仅记混了,而且很坚 ...
- 为什么重写equals()就要重写hashCode()
文章目录 一.前言 二.hashCode()方法 三.equals()方法 四.hashCode() 与 equals() 4.1 不会创建"类对应的散列表"的情况 4.2 会创建 ...
最新文章
- 谷歌技术主管:当我们选择工作时,什么最重要?
- 在IIS6上部署WebService
- Email 正则验证
- 【收藏】spark中map与mapPartitions区别
- AI助手智商测评Siri进步最大,无人驾驶打车服务已在美国试行
- POJ 1845 Sumdiv 【逆元】
- oracle中的sysdba角色,oracle 以sysdba角色 登陆用户
- 高等代数第3版下 [丘维声 著] 2015年版_微电子电路设计 第4版 电子书
- raspbian linux,如何在 Raspberry Pi 上安装 Raspbian
- MySQL基础(2)----DDL DML DQL语言完成数据库的增删改查操作 数据备份(导入导出sql包) 单表查询
- GNU Operating System
- python电影名称词云_python爬虫——词云分析最热门电影《后来的我们》
- ansible的安装
- 高性能网络编程-反应堆模型(reactor)
- 2021 CCF基于UEBA的用户上网异常行为分析baseline线上0.90
- AlphaCode 惊世登场!编程版“阿法狗”悄悄参赛,击败一半程序员
- 团队作业10——事后诸葛亮分析
- 日常使用计算机出现的小问题(一)win10操作系统设备和驱动器栏目中出现空白图标该如何删除?删除一次刷新又重新出现
- 解决 k8s 限制内存后 还出现 OOM 错误的问题:资源整合
- Mysql索引分类及其使用实例