`

有关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);
            }

 

分享到:
评论

相关推荐

    hashcode()和equals()

    `equals()` 使用 `Objects.equals()` 和 `==` 运算符来比较 `name` 和 `age`,而 `hashCode()` 使用 `Objects.hash()` 来组合 `name` 和 `age` 的哈希码。 了解并正确使用 `hashCode()` 和 `equals()` 是编写高质量...

    重写equals和hashcode方法_equals_重写equals和hashcode方法_

    以下是对`equals()` 和 `hashCode()` 方法的详细解释及其重写的重要性。 **1. equals() 方法** `equals()` 方法用于比较两个对象是否相等。默认情况下,`equals()` 检查两个对象是否是同一个对象(即内存地址是否...

    C# Equals 和 GetHashCode 方法重写

    ### C# Equals 和 GetHashCode 方法重写 在C#编程中,`Equals` 和 `GetHashCode` 方法是非常重要的成员方法,它们对于确保对象的正确比较以及高效地存储和检索对象至关重要。这两个方法通常需要在自定义类中进行...

    winform 重写Equals源码

    下面我们将深入探讨WinForm中重写`Equals`方法的相关知识点。 首先,`Equals`方法是`Object`类中的一个虚方法,它的默认行为是基于引用的相等性检查,即两个对象是否指向内存中的同一个位置。然而,对于值类型的...

    Java语言深入_equals

    在实践中,为了编写正确的`equals`方法,通常建议使用`Objects.equals()`和`Objects.hash()`方法,它们可以避免空指针异常,并简化代码。同时,`equals`方法和`hashCode`方法应当一起重写,以确保对象相等时其哈希码...

    HashCode相同equals不同的2位字符集合算法

    在上述代码中,`Objects.equals()`和`Objects.hash()`方法确保了正确的比较和哈希计算,减少了潜在的错误。 总之,理解并正确实现`hashCode()`和`equals()`对于优化Java集合框架的性能和避免逻辑错误至关重要。在...

    Java中equals方法隐藏的陷阱

    - **传递性**:对于任何非空引用值x、y和z,如果`x.equals(y)`返回`true`并且`y.equals(z)`返回`true`,那么`x.equals(z)`也应该返回`true`。 - **一致性**:对于任何非空引用值x和y,如果在多次调用`x.equals(y)`时...

    C#使用Equals()方法比较两个对象是否相等的方法

    在上面的代码示例中,`price` 和 `amount` 都是整型变量,`price.Equals(amount)` 的调用实际上是通过隐式装箱将整型转换为`System.Int32`对象,然后调用`Equals()`方法进行比较。由于 `price` 和 `amount` 都是100...

    java中hashcode()和equals()的详解

    Java的`Objects.equals()`和`Objects.hash()`方法是帮助我们更安全地处理`equals()`和`hashCode()`的实用工具。`Objects.equals(a, b)`可以避免空指针异常,当a或b为null时,它会正确处理。而`Objects.hash()`可以...

    equals,hashcode,toString

    `hashCode()` 方法则与`equals()`密切相关。在哈希表(如HashMap、HashSet)中,对象的哈希码用于快速定位对象存储的位置。当两个对象通过`equals()`方法判断为相等时,它们的`hashCode()`方法返回值也应该相等。...

    Java容器集合(equals 和 hashCode+基础数据结构+ArrayList+Vector和LinkedList)

    Java容器集合(equals和hashCode+基础数据结构+ArrayList+Vector和LinkedList) Java容器集合是Java中的一种基础数据结构,用于存储和管理数据。其中,equals和hashCode方法是Java容器集合中两个非常重要的方法,...

    java中hashcode()和equals()的详解.docx

    在Java编程语言中,`hashCode()`和`equals()`方法是非常重要的概念,它们主要用于处理对象的唯一标识和对象之间的相等性判断。正确地实现这两个方法对于确保程序的高效运行至关重要。 #### `hashCode()`方法解析 `...

    详解hashCode()和equals()的本质区别和联系

    详解hashCode()和equals()的本质区别和联系 在 Java 中,hashCode() 和 equals() 是两个非常重要的方法,它们都是从 Object 类继承来的。了解这两个方法的本质区别和联系对于 Java 开发者来说至关重要。 equals() ...

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

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

    如何在IDEA中对 hashCode()和 equals() 利用快捷键快速进行方法重写

    在Java编程中,`equals()`和`hashCode()`方法是Object类中的两个重要方法。...如果你希望了解更多有关`equals()`和`hashCode()`的知识,以及IDEA中的其他快捷键和功能,可以查阅IDEA的帮助文档或者相关的教程资源。

    equals与hashCode方法讲解

    equals 方法和 hashCode 方法是 Java 语言中两个重要的方法,它们都是在 Object 类中定义的。equals 方法用于比较两个对象是否相等,而 hashCode 方法用于返回对象的哈希码。 在 Java 的 Object 类中,equals 方法...

    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 和 == 的比较 Java 中 String.equals 和 == 的比较是 Java 编程语言中一个常见的概念,但是一些初学者容易混淆这两个概念。下面我们将详细介绍 Java 中 String.equals 和 == 的比较。 ...

Global site tag (gtag.js) - Google Analytics