`

有关hash和equals的解释

J# 
阅读更多

这个问题网上已经泛滥了,我把haspMap的put方法源码记下来,不用再争论了以后

由于java里的hashSet底层是用hashMap来实现的,所以只看hashMap的源码就OK了

 

           
public Object put(Object obj, Object obj1)
            {
/* 370*/        if(obj == null)
/* 371*/            return putForNullKey(obj1);
/* 372*/        int i = hash(obj.hashCode());
/* 373*/        int j = indexFor(i, table.length);
/* 374*/        for(Entry entry = table[j]; entry != null; entry = entry.next)
                {
                    Object obj2;
/* 376*/            if(entry.hash == i && ((obj2 = entry.key) == obj || obj.equals(obj2)))//先取hashCode值找位置,在做后续的==和equals判断
                    {
/* 377*/                Object obj3 = entry.value;
/* 378*/                entry.value = obj1;
/* 379*/                entry.recordAccess(this);
/* 380*/                return obj3;
                    }
                }

/* 384*/        modCount++;
/* 385*/        addEntry(i, obj, obj1, j);
/* 386*/        return null;
            }

 

void addEntry(int i, Object obj, Object obj1, int j)
            {
/* 752*/        Entry entry = table[j];
/* 753*/        table[j] = new Entry(i, obj, obj1, entry);
/* 754*/        if(size++ >= threshold)
/* 755*/            resize(2 * table.length);
            }

 

分享到:
评论

相关推荐

    Java中hashCode和equals方法的正确使用

    在这篇文章中,我将告诉大家我对hashCode和equals方法的理解。我将讨论他们的默认实现,以及如何正确的重写他们。我也将使用Apache Commons提供的工具包做一个实现。  hashCode()和equals()定义在Object类中,这...

    Java中equals()与hashCode()的原理与设计

     hashCode()的返回值和equals()的关系如下:  如果x.equals(y)返回“true”,那么x和y的hashCode()必须相等。  如果x.equals(y)返回“false”,那么x和y的hashCode()有可能相等,也有可能不等。  简单的...

    PHP中用hash实现的数组

    而其计算字符串hash值的方法如下,将源码摘出来以供查备: 复制代码 代码如下: static inline ulong zend_inline_hash_func(const char *arKey, uint nKeyLength) { register ulong hash = 5381;     &...

    java 中String.equals和==的比较

    主要介绍了java 中String.equals和==的比较的相关资料,需要的朋友可以参考下

    【面试】hashCode与equals两者之间的关系 / == 和equals / 为什么要重写equals方法 / 重写equals /hashcode方法 / 为什么要重写hashCode方法

    文章目录1、hashCode与equals两者之间的关系2、== 和equals的区别`3、为什么要重写equals()方法?4、重写equals()方法5、为什么要重写hashCode()方法?6、什么时候需要重写hashCode()方法?7、重写hashCode()方法: ...

    解析Java对象的equals()和hashCode()的使用

     在Java语言中,equals()和hashCode()两个函数的使用是紧密配合的,你要是自己设计其中一个,要设计另外一个。在多数情况 下,这两个函数是不用考虑的,直接使用它们的默认设计可以了。但是在一些情况下,这两个...

    面试官瞬间就饱了,重写equals函数,需要重写hashCode函数吗?

    面试官瞬间就饱了,重写equals函数,需要重写hashCode函数吗? 面试官问我,为什么重写equals函数,必须重写hashCode函数,我当时就懵住了。 然后扯天扯地,然后面试官瞬间就饱了,痛定思痛,写下这篇博客 首先看...

    Hash知识点总结

    Hash相关知识点 面试基本提纲  1. hash 表是什么 2. hash 表用来做什么 3. hash 表是怎么做到可以搜索的? 1. hash 值如何求,hashCode 是什么,用来做什么 2. 冲突 1. 什么是冲突 2. 怎么避免冲突 3. 冲突了...

    javaee_tedu_day09.zip

    ATM系统 Clone方法 toString方法:表示返回对象的字符串表示形式 包名.类名@hashCode(内存地址) ...返回一个hash code码,Integer,内存地址有关的hash算法 如果equal返回true的话,hashCode相同,重写hashCode方法

    Java equals 方法与hashcode 方法的深入解析

    PS:本文使用jdk1.7解析1.Object类 的equals 方法 代码如下: /** * Indicates whether some other object is “equal to” this one. *  * The {@code equals} method implements an equivalence relation * on ...

    sesvc.exe 阿萨德

    if (e.hash == hash && ((k = e.key) == key || key.equals(k))) { V oldValue = e.value; e.value = value; e.recordAccess(this); return oldValue; } } modCount++; addEntry(hash, key, value, i); ...

    超实用的面试题整理

    · value对象的equals()和hashcode()方法根本一点用也没有。 HashMap是基于哈希表实现的,每一个元素是一个key-value对,其内部通过单链表解决冲突问题,容量不足(超过了阀值)时,同样会自动增长。 HashMap...

    前台页面敏感数据传输到后台钱的加密处理(md5加密)

    if(md5.getMD5ofStr(user.getMobile()).equals(mobile)&&md5.getMD5ofStr(user.getPassword()).equals(password)){ flag=true; request.getSession().setAttribute("USER", user); List<Activity> ...

    关于重写equals()为什么一定要重写hashcode()自己的一点心得

    首先我们看下下面代码及输出和String重写equals和hashcode的源码: package com.zzy.test; public class Test6 { public static void main(String[] args) { String s1="aaa"; String s2="aaa"; String s3=new ...

    php5.6下载|php5.6.30下载32/64位

    php5.6下载|php5.6.30下载32/64位 php5.6是一种常见的编程语言。绿色资源网带来的为php5.6,具有很大新特性,如:可以使用表达式定义常量、加入hash_equals()函数、新增generators等,用户下载后体验下就知道了。

    2023年最新java面试大全

    【09期】说说hashCode() 和 equals() 之间的关系? 【10期】Redis 面试常见问答 【11期】分布式系统接口,如何避免表单的重复提交? 【12期】谈谈项目中单点登录的实现原理? 【13期】谈谈 Redis 的过期策略 ...

    java笔试题

    16、两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对? 17、是否可以继承String类? 18、当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,...

    大厂真题之阿里云-Java实习生

    HashSet 是如何保证不重复的 向 HashSet 中 add ()元素时,判断元素是否存在的依据,不仅要比较hash值,同时还要结合 equles 方法比较。 HashSet 中的 add ()方法会使用 HashMap 的 add ()方法。以下是 HashSet 部分...

Global site tag (gtag.js) - Google Analytics