当前位置:网站首页 > 技术博客 > 正文

java中hashset作用



以下是关于HashCode的官方文档定义:

 

以上这段官方文档的定义,我们可以抽出成以下几个关键点:

1、hashCode的存在主要是用于查找的快捷性,如Hashtable,HashMap等,hashCode是用来在散列存储结构中确定对象的存储地址的;

2、如果两个对象相同,就是适用于equals(java.lang.Object) 方法,那么这两个对象的hashCode一定要相同;

3、如果对象的equals方法被重写,那么对象的hashCode也尽量重写,并且产生hashCode使用的对象,一定要和equals方法中使用的一致,否则就会违反上面提到的第2点;

4、两个对象的hashCode相同,并不一定表示两个对象就相同,也就是不一定适用于equals(java.lang.Object) 方法,只能够说明这两个对象在散列存储结构中,如Hashtable,他们“存放在同一个篮子里”

再归纳一下就是hashCode是用于查找使用的,而equals是用于比较两个对象的是否相等的。以下这段话是从别人帖子回复拷贝过来的:

 


最后,我们来看一个具体的示例吧,

 

这个输出的结果:

 

以上这个示例,我们只是重写了hashCode方法,从上面的结果可以看出,虽然两个对象的hashCode相等,但是实际上两个对象并不是相等;,我们没有重写equals方法,那么就会调用object默认的equals方法,是比较两个对象的引用是不是相同,显示这是两个不同的对象,两个对象的引用肯定是不定的。这里我们将生成的对象放到了HashSet中,而HashSet中只能够存放唯一的对象,也就是相同的(适用于equals方法)的对象只会存放一个,但是这里实际上是两个对象a,b都被放到了HashSet中,这样HashSet就失去了他本身的意义了。

此时我们把equals方法给加上:

 

此时得到的结果就会如下:

 

从结果我们可以看出,现在两个对象就完全相等了,HashSet中也只存放了一份对象。

版权声明


相关文章:

  • 137端口是什么协议2025-03-26 13:30:03
  • epub阅读软件哪个好2025-03-26 13:30:03
  • 怎么用navicat创建表2025-03-26 13:30:03
  • 信息安全四个层次2025-03-26 13:30:03
  • 序列化的概念2025-03-26 13:30:03
  • 找不到gpedit.msc文件怎么办2025-03-26 13:30:03
  • 树壮数组2025-03-26 13:30:03
  • 大端与小端存储模式详解2025-03-26 13:30:03
  • 0-1背包问题与背包问题2025-03-26 13:30:03
  • ubuntu自带输入法怎么用2025-03-26 13:30:03