黑马程序员技术交流社区

标题: if (e.hash == hash && ((k = e.key) == key||key.equals(k))) [打印本页]

作者: decadence90    时间: 2015-7-25 21:34
标题: if (e.hash == hash && ((k = e.key) == key||key.equals(k)))
代码详解:

         注意:        ==只比较地址值,地址值跟哈希值没有关系!
               
                哈希值(哈希码值) 指的是通过hashCode()方法获取的值,跟地址值没有关系。
                只不过默认的hashCode()方法内部得到的结果是通过地址值生成的,如果我们重写了就按照我们重写的方式生成哈希值!


        1、第一步通过比较hashCode的值
                目的:如果两个对象的hashCode的值不相同,那么他们肯定不是同一个对象,
                所以不再需要比较后面的内容,直接添加该元素即可
        2、那么为什么需要后续的比较
                原因:因为如果两个对象的内容不同,hashCode的值还是有可能相同的。
                        举例:几个哈希值都是8的不同字符串
                        'GA8Mfaaa', 'e4R5Blaa', 'Y92RLlaa', 'sCvEytaa', 'ydDspvaa',
                        'ofLCCCaa', 'uemC0Daa', 'CbgFKKaa', 'd0XRbNaa', 'hUzU9Saa'
        3、为什么需要k = e.key) == key这一步的比较?
                原因:提高效率,因为如果这个时候比较的是用一个对象,hashCode的值肯定相同。
                那么如果直接走equals()方法进行比较,代码较多,而同一个对象==比较,结果肯定为true,
                就不用再走equals()方法了。
        4为什么需要key.equals(k)这一步的比较?
                如果对象的hashCode值相同,但内容相同不同(查看上面的举例),就不能够被添加,所以需要这一个进行内容的比较!
作者: home7192    时间: 2015-7-25 22:46
:victory:学习!!
作者: decadence90    时间: 2015-7-26 07:50
home7192 发表于 2015-7-25 22:46
学习!!

嗯嗯,讲这个的时候不是很理解啊
作者: 王鹏亮    时间: 2015-7-26 09:44
加油!!!!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2