随笔 - 95,  文章 - 0,  评论 - 0,  阅读 - 14253


第七天

==:判断对象的首地址是否一致(数值判断)
equals:
--原用于objec的equals方法的话,则是使用==进行判断
--重写之后,是根据成员变量的值来确定对象是否相同
public class PersonEquals {
private String name;
private int age;
private double money;
public PersonEquals(String name, int age, double money) {
super();
this.name = name;
this.age = age;
this.money = money;
}
public PersonEquals() {
super();
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + age;
long temp;
temp = Double.doubleToLongBits(money);
result = prime * result + (int) (temp ^ (temp >>> 32));
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)//先判断当对象的hashCode是否相等
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
PersonEquals other = (PersonEquals) obj;//强制类型转换
if (age != other.age)
return false;
if (Double.doubleToLongBits(money) != Double.doubleToLongBits(other.money))
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
public static void main(String[] args) {
PersonEquals p = new PersonEquals("aa",18,1000.0);
PersonEquals p1 = new PersonEquals("aa",18,1000.0);
System.out.println(p.equals(p1));
System.out.println(p.hashCode());
System.out.println(p1.hashCode());
/*System.out.println(p);
System.out.println(p1);*/
}
}


首先一个对象肯定有物理地址,对象的物理地址跟这个hashcode地址不一样。
hashcode代表对象的地址说的是对象在hash表中的位置,物理地址说的对象存放在内存中的地址。

--hashcode主要为了提高对象判断、对象查询的效率而生成的一套机制
--JVM每new一个Object,它都会将这个Object丢到一个Hash哈希表中去,这样的话,下次做 Object的比較或者取这个对象的时候,它会依据对象的hashcode再从Hash表中取这个对象。这样做的目的是提高取对象的效率。
--hashcode并不等于物理内存的地址
--equals 方法能比较两个对象的内容是否相等,因此可以用来查找某个对象是否在集合容器中,通常大致就是逐一去取集合中的每个对象元素与需要查询的对象进行equals比较,当发现某个元素与要查找的对象进行equals方法比较的结果相等时,则停止继续查找并返回肯定的信息,否则,返回否定的信息。
但是通过这种比较的方式效率很低,时间复杂度比较高。那么我们是否可以通过某种编码方式,

将每一个对象都具有某个特定的码值,根据码值将对象分组然后划分到不同的区域,这样当我们需要在集合中查询某个对象时,我们先根据该对象的码值就能确定该对象存储在哪一个区域,然后再到该区域中通过equals方式比较内容是否相等,就能知道该对象是否存在集合中。
通过这种方式我们减少了查询比较的次数,优化了查询的效率同时也就减少了查询的时间。

posted on   天涯何  阅读(65)  评论(0编辑  收藏  举报
(评论功能已被禁用)
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· 地球OL攻略 —— 某应届生求职总结
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示