栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java学习==、equals、compareTo和Map的实现原理

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java学习==、equals、compareTo和Map的实现原理

== 是比较堆区地址
equals:
- 每一个简单类都有继承了Object类的equals方法,实现:只是简单的return (this == obj);
- java工具类Objects有一个equals(Object a, Object b)方法,实现:return (a == b) || (a != null && a.equals(b)); 追加了a,b为空的情况

重写equals()的规范
需要注意的是,在Java规范中,它对equals()方法的使用必须要遵循如下几个规则:

1、自反性:对于任何非空引用值 x,x.equals(x) 都应返回 true。
2、对称性:对于任何非空引用值 x 和 y,当且仅当y.equals(x) 返回 true 时,x.equals(y) 才应返回 true。
3、传递性:对于任何非空引用值 x、y 和z,如果 x.equals(y) 返回 true,并且 y.equals(z) 返回 true,那么 x.equals(z) 应返回 true。
4、一致性:对于任何非空引用值 x 和 y,多次调用 x.equals(y) 始终返回 true 或始终返回false,前提是对象上 equals 比较中所用的信息没有被修改
5、对于任何非空引用值 x,x.equals(null) 都应返回false。

compareTo方法,一般都是实现comparable接口,重写它的方法。重写中判断的方式一般是先判断两个地址是否相同即==,然后再判断hashcode快速定位两个对象在散列存储结构中位置相同,最后再仔细判断其内容是否相同(如果是int直接==,如果是string,会先转成字符数组逐个比较)

map的put和get原理。map可以看成就是一个数组,每个数组元素都是一个链表。首先将k,v封装成node对象中作为map的基本元素。

  1. 当put一个node对象时,会调用k的hashCode()方法算出hash值,然后通过哈希表函数/哈希算法,将hash值转成数组下标,下标位置上的链表如果没有任何值就放到链表中;如果链表中有值,就会将k和链表上每个节点的k进行equals,如果equals都是false,就加进去,如果equals有true就覆盖。
  2. 当get一个node对象时同理,先用k算出下标,再和链表上每个k进行equals,true就返回,都是false就返回null
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/886000.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号