`
rrsy23
  • 浏览: 188150 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

Java-之-Set--equlas,hashCode机密--01

阅读更多

废话不说,代码先行!

 

package com.bobo;

import java.util.Set;
import java.util.HashSet;

public class TestA {
    public static void main(String[] args) {
        Set<Student> set = new HashSet<Student>();//1
        set.add(new Student());//2
        set.add(new Student());//3
        //set大小->2
        System.out.println("set大小->" + set.size());//4
        //set包含 new Student()-->false
        System.out.println("set包含 new Student()-->" + set.contains(new Student()));//5
        set.clear();//6
        System.out.println("--------------清空集合----------");
        Student s  =new Student();//7
        set.add(s);//8
        set.add(s);//9
        //set大小->1
        System.out.println("set大小->" + set.size());//10
        //set包含 new Student()-->false
        System.out.println("set包含 new Student()-->" + set.contains(new Student()));//11
        //set包含 s指向的对象吗-->true
        System.out.println("set包含 s指向的对象吗-->" + set.contains(s));//12
    }
}
class Student extends Object{
}
简单分析:2,3行生成2个对象放进去就是2个;为什么?

             首先,java的泪默认集成Object得到

       public boolean equals(Object obj) {
        return (this == obj);
       }

       public native int hashCode();

      都是通过对象地址产生hashcode和比较的!

      这样产生hashcode自然不同就放进去[不用考虑equals哦,呵呵后面在继续]

 

         8,9行一个对象2个引用放进去就是1个,为什么?

         上面类似 s指向的对象相同就是s的内容一样[一个地址数据],这样生成的hashcode一样,放不进!

 

        5,11行 false为什么?

        因为到集合找东西首先把找的对象生成hashcode看看集合有没有这个hashcode对应的,假设2,3分别的hashcode是2,3现在找的这个生成的hashcode是4,自然没有,返回false

     12行,返回true

     英文是一个s指向自然hashcode一样,在看equals返回是true

 

 

分享到:
评论
1 楼 martinfans 2009-07-09  
<div class="quote_title">rrsy23 写道</div><div class="quote_div"><p>废话不说,代码先行!</p>
<p> </p>
<p>package com.bobo;</p>
<p>import java.util.Set;<br>import java.util.HashSet;</p>
<p>public class TestA {<br>    public static void main(String[] args) {<br>        Set&lt;Student&gt; set = new HashSet&lt;Student&gt;();//<span style="background-color: #ff0000;">1<br></span>        set.add(new Student());//<span style="background-color: #ff0000;">2<br></span>        set.add(new Student());//<span style="background-color: #ff0000;">3<br></span>        //set大小-&gt;2<br>        System.out.println("set大小-&gt;" + set.size());//4<br>        //set包含 new Student()--&gt;false<br>        System.out.println("set包含 new Student()--&gt;" + set.contains(new Student()));//5<br>        set.clear();//6<br>        System.out.println("--------------清空集合----------");<br>        Student s  =new Student();//7<br>        set.add(s);//8<br>        set.add(s);//9<br>        //set大小-&gt;1<br>        System.out.println("set大小-&gt;" + set.size());//10<br>        //set包含 new Student()--&gt;false<br>        System.out.println("set包含 new Student()--&gt;" + set.contains(new Student()));//11<br>        //set包含 s指向的对象吗--&gt;true<br>        System.out.println("set包含 s指向的对象吗--&gt;" + set.contains(s));//12<br>    }<br>}<br>class Student extends Object{<br>}<br>简单分析:2,3行生成2个对象放进去就是2个;为什么?</p>
<p>             首先,java的泪默认集成Object得到</p>
<p>       public boolean equals(Object obj) {<br>        return (this == obj);<br>       }</p>
<p>        public native int hashCode();</p>
<p>      都是通过对象地址产生hashcode和比较的!</p>
<p>      这样产生hashcode自然不同就放进去[不用考虑equals哦,呵呵后面在继续]</p>
<p> </p>
<p>         8,9行一个对象2个引用放进去就是1个,为什么?</p>
<p>         上面类似 s指向的对象相同就是s的内容一样[一个地址数据],这样生成的hashcode一样,放不进!</p>
<p> </p>
<p>        5,11行 false为什么?</p>
<p>        因为到集合找东西首先把找的对象生成hashcode看看集合有没有这个hashcode对应的,假设2,3分别的hashcode是2,3现在找的这个生成的hashcode是4,自然没有,返回false</p>
<p>     12行,返回true</p>
<p>     英文是一个s指向自然hashcode一样,在看equals返回是true</p>
<p> </p>
<p>  </p></div><br/>好文。
override equals的时候要注意一个陷阱
请看这里,
http://www.artima.com/lejava/articles/equality.html

相关推荐

    java equlas

    equals 的简单介绍,对与equals有一个更加清晰的认识,可以参考

    Java中==运算符与equals方法的区别及intern方法详解

    hashCode方法是Java中的一个方法,它可以生成一个对象的哈希值。哈希值是一个整数,它可以唯一地标识一个对象。两个对象的哈希值相等并不一定意味着两个对象相等,因为不同的对象可能具有相同的哈希值。 intern方法...

    .net 命名空间总结

    ### .NET 命名空间总结 #### 一、引言 在.NET Framework或.NET Core/Standard中,命名空间(Namespace)是组织类和其他类型的一种逻辑分组方式,旨在帮助开发人员管理和避免名称冲突。本篇文章将深入探讨.NET中的...

    基于prototype的validation.js发布2.3.4新版本,让你彻底脱离表单验证的烦恼

    增加validate-ajax以支持ajax验证 增加validate-pattern直接通过正则表达式的认证 修改validate-equlas以验证密码与确认密码的问题 增加less-than与great-than的验证以支持开始日期与结束日期相比较的问题 增加...

    spring-boot-2.0.5.RELEASE.jar中文文档.zip

    # 压缩文件中包含: 中文文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;

    spring-boot-2.0.3.RELEASE.jar中文文档.zip

    # 压缩文件中包含: 中文文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;

    spring-boot-2.4.7.jar中文-英文对照文档.zip

    # 压缩文件中包含: 中文-英文对照文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文-英文对照文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;

    spring-boot-2.0.9.RELEASE.jar中文文档.zip

    # 压缩文件中包含: 中文文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;

    scratch少儿编程逻辑思维游戏源码-小鸡会飞.zip

    scratch少儿编程逻辑思维游戏源码-小鸡会飞.zip

    scratch少儿编程逻辑思维游戏源码-逃跑.zip

    scratch少儿编程逻辑思维游戏源码-逃跑.zip

    IT软件系统开发方案样本.doc

    IT软件系统开发方案样本.doc

    scratch少儿编程逻辑思维游戏源码-橡皮筋球.zip

    scratch少儿编程逻辑思维游戏源码-橡皮筋球.zip

    【覆盖度识别】基于matlab GUI图像处理技术植物覆盖度识别【含Matlab源码 13253期】.zip

    985研究生,Matlab领域优质创作者 (1)如需代码 加腾讯企鹅号,见评论区或私信; (2)代码运行版本 Matlab 2019b (3)其他仿真咨询 1 完整代码包运行+运行有问题可咨询 2 期刊或论文复现; 3 程序定制; 4 期刊写作或指导; 5 科研合作;

    高速光隔离RS232/485通讯电路模块电源及信号隔离的PCB设计详解

    内容概要:本文详细介绍了高速光隔离RS232与485通讯电路模块的设计,重点阐述了其电源和信号隔离的功能。该模块采用高速光耦合器技术,结合RS232与485通讯协议,实现长距离、高速度、高可靠性的数据传输。文中还深入探讨了PCB设计的原则,包括合理的元件布局、优化的布线方式以及高质量元件的选择,确保电路的稳定性和安全性。 适合人群:从事电子通信领域的工程师和技术人员,尤其是对RS232/485通讯电路有研究兴趣的人群。 使用场景及目标:适用于需要设计或改进RS232/485通讯电路模块的项目,旨在提升数据传输的可靠性和抗干扰能力,确保电路的安全性和稳定性。 其他说明:本文提供的内容并非实际的PCB实物,而是详细的PCB电子文件和电路图,可供进一步开发和应用。

    spring-boot-1.1.8.RELEASE.jar中文文档.zip

    # 压缩文件中包含: 中文文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;

    rocksdbjni-7.0.3.jar中文文档.zip

    # 压缩文件中包含: 中文文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;

    spring-boot-1.4.2.RELEASE.jar中文-英文对照文档.zip

    # 压缩文件中包含: 中文-英文对照文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文-英文对照文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;

    水利规范-7p倒虹吸工程及渠道防渗衬砌设计图集.zip

    水利规范-7p倒虹吸工程及渠道防渗衬砌设计图集.zip

    scratch少儿编程逻辑思维游戏源码-太空大战4.zip

    scratch少儿编程逻辑思维游戏源码-太空大战4.zip

    pcl启动器,资源下载器

    免费pcl,直接获取资源下载器

Global site tag (gtag.js) - Google Analytics