这个问题网上已经泛滥了,我把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);
}
分享到:
相关推荐
`equals()` 使用 `Objects.equals()` 和 `==` 运算符来比较 `name` 和 `age`,而 `hashCode()` 使用 `Objects.hash()` 来组合 `name` 和 `age` 的哈希码。 了解并正确使用 `hashCode()` 和 `equals()` 是编写高质量...
以下是对`equals()` 和 `hashCode()` 方法的详细解释及其重写的重要性。 **1. equals() 方法** `equals()` 方法用于比较两个对象是否相等。默认情况下,`equals()` 检查两个对象是否是同一个对象(即内存地址是否...
### C# Equals 和 GetHashCode 方法重写 在C#编程中,`Equals` 和 `GetHashCode` 方法是非常重要的成员方法,它们对于确保对象的正确比较以及高效地存储和检索对象至关重要。这两个方法通常需要在自定义类中进行...
下面我们将深入探讨WinForm中重写`Equals`方法的相关知识点。 首先,`Equals`方法是`Object`类中的一个虚方法,它的默认行为是基于引用的相等性检查,即两个对象是否指向内存中的同一个位置。然而,对于值类型的...
在实践中,为了编写正确的`equals`方法,通常建议使用`Objects.equals()`和`Objects.hash()`方法,它们可以避免空指针异常,并简化代码。同时,`equals`方法和`hashCode`方法应当一起重写,以确保对象相等时其哈希码...
在上述代码中,`Objects.equals()`和`Objects.hash()`方法确保了正确的比较和哈希计算,减少了潜在的错误。 总之,理解并正确实现`hashCode()`和`equals()`对于优化Java集合框架的性能和避免逻辑错误至关重要。在...
- **传递性**:对于任何非空引用值x、y和z,如果`x.equals(y)`返回`true`并且`y.equals(z)`返回`true`,那么`x.equals(z)`也应该返回`true`。 - **一致性**:对于任何非空引用值x和y,如果在多次调用`x.equals(y)`时...
在上面的代码示例中,`price` 和 `amount` 都是整型变量,`price.Equals(amount)` 的调用实际上是通过隐式装箱将整型转换为`System.Int32`对象,然后调用`Equals()`方法进行比较。由于 `price` 和 `amount` 都是100...
Java的`Objects.equals()`和`Objects.hash()`方法是帮助我们更安全地处理`equals()`和`hashCode()`的实用工具。`Objects.equals(a, b)`可以避免空指针异常,当a或b为null时,它会正确处理。而`Objects.hash()`可以...
`hashCode()` 方法则与`equals()`密切相关。在哈希表(如HashMap、HashSet)中,对象的哈希码用于快速定位对象存储的位置。当两个对象通过`equals()`方法判断为相等时,它们的`hashCode()`方法返回值也应该相等。...
Java容器集合(equals和hashCode+基础数据结构+ArrayList+Vector和LinkedList) Java容器集合是Java中的一种基础数据结构,用于存储和管理数据。其中,equals和hashCode方法是Java容器集合中两个非常重要的方法,...
在Java编程语言中,`hashCode()`和`equals()`方法是非常重要的概念,它们主要用于处理对象的唯一标识和对象之间的相等性判断。正确地实现这两个方法对于确保程序的高效运行至关重要。 #### `hashCode()`方法解析 `...
详解hashCode()和equals()的本质区别和联系 在 Java 中,hashCode() 和 equals() 是两个非常重要的方法,它们都是从 Object 类继承来的。了解这两个方法的本质区别和联系对于 Java 开发者来说至关重要。 equals() ...
在这篇文章中,我将告诉大家我对hashCode和equals方法的理解。我将讨论他们的默认实现,以及如何正确的重写他们。我也将使用Apache Commons提供的工具包做一个实现。 hashCode()和equals()定义在Object类中,这...
在Java编程中,`equals()`和`hashCode()`方法是Object类中的两个重要方法。...如果你希望了解更多有关`equals()`和`hashCode()`的知识,以及IDEA中的其他快捷键和功能,可以查阅IDEA的帮助文档或者相关的教程资源。
equals 方法和 hashCode 方法是 Java 语言中两个重要的方法,它们都是在 Object 类中定义的。equals 方法用于比较两个对象是否相等,而 hashCode 方法用于返回对象的哈希码。 在 Java 的 Object 类中,equals 方法...
hashCode()的返回值和equals()的关系如下: 如果x.equals(y)返回“true”,那么x和y的hashCode()必须相等。 如果x.equals(y)返回“false”,那么x和y的hashCode()有可能相等,也有可能不等。 简单的...
而其计算字符串hash值的方法如下,将源码摘出来以供查备: 复制代码 代码如下: static inline ulong zend_inline_hash_func(const char *arKey, uint nKeyLength) { register ulong hash = 5381; &...
Java 中 String.equals 和 == 的比较 Java 中 String.equals 和 == 的比较是 Java 编程语言中一个常见的概念,但是一些初学者容易混淆这两个概念。下面我们将详细介绍 Java 中 String.equals 和 == 的比较。 ...