`
racingbird
  • 浏览: 23707 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

散列HashCode

 
阅读更多

散列的价值在于速度: 散列使得查询快速,由于瓶颈位于键的查找速度,

因此解决方案之一就是保持键的排序状态,然后使用Collections.binarySearch()

进行查询.

散列更进一步,它将键保存在某处,以便能够很快找到。存储一组元素最快

的数据结构是数组,所以使用它来表示键的信息(这里说的是键的信息,而不是键本身)。

但是因为数组不能够调整容量,因此就有一个问题:我们希望在Map中保存数量不确定

的值,但是如果键的数量被数组的容量限制了,该怎么办?

答案是:数组并不保存键本身,而是通过键对象生成一个数字,将其作为数组

下标。这个数字就是散列码。由定义在Object中的,切可能由你的类覆盖的hashCode()

方法。

为解决数组容量被固定的问题,不同的键可以产生相同的下标。也就是说,可能会有

冲突。因此数组多大就不重要了,任何键总能在数组中找到它的位置。

于是查询一个值的过程首先就是计算散列码,然后使用散列码查询数组。如果

能够保证没有冲突,那可就有一个完美的散列函数,但是这种情况只是特例。

通常冲突由外部链接处理:数组并不直接保存值,而是保存值的list。在后对list中的

值使用equals()方法进行线性的查询。这部分的查询自然会比较慢,但是,如果散列

函数好的话,数组的每个位置就只有较少的值。因此,不是查询整个list,而是快速

地跳到数组的某个位置,只对很少的元素进行比较。

 

 

 

  • 大小: 60.2 KB
分享到:
评论

相关推荐

    Java理论与实践:hashCode()和equals()方法

    本文介绍了Java语言不直接支持关联数组,可以使用任何对象作为一个索引的数组,但在根Object类中使用 hashCode()方法明确表示...通过统一定义equals()和hashCode(),可以提升类作为基于散列的集合中的关键字的使用性。

    复写hashCode()方法,和equasl()方法

    ### 复写`hashCode()`方法与`equals()`方法 在Java编程中,`hashCode()`方法与`equals()`方法是对象比较中的两个非常重要的方法。它们主要用于判断对象是否相等以及对象的散列值,这对于集合类(如`HashSet`)来说...

    Java中equals,hashcode和==的区别

    最后,hashcode 方法是一个对象的散列码,它是用来唯一标识一个对象的。hashcode 方法可以将一个对象转换为一个整数值,以便于对象的存储和比较。通常情况下,hashcode 方法需要和 equals 方法一起使用,以确保两个...

    hash表和hashCode1

    哈希表,又称散列表,是...总的来说,哈希表通过高效的散列函数和冲突解决策略实现了快速的数据存取,而hashCode()方法则是这一过程中的关键一环,它与equals()方法协同工作,确保了对象在散列集合中的正确定位和比较。

    散列算法与散列码(实例讲解)

    在给定的例子中,Groundhog类没有重写hashCode()方法,因此它使用了Object的hashCode()方法生成散列码,这导致了散列码的不正确性。正确的做法是重写hashCode()方法,以确保散列码的唯一性。 同时,equals()方法也...

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

    1、何时需要重写equals()  当一个类有自己特有的“逻辑相等”概念(不同于对象身份的概念)。 ...  简单的说,“相等的对象必须具有相等的散列码”。  3、什么是equals()与如何设计equals()

    Java 散列存储详解及简单示例

    散列存储的运作机制如下:当向如HashMap这样的散列容器中插入一个对象时,首先调用对象的`hashCode()`方法生成散列码。这个散列码被用来确定在内部数组中的索引位置。然而,由于不同的对象可能会生成相同的散列码,...

    浅谈Java中hashCode的正确求值方法

    在实践中,可以使用Arrays.hashCode方法来计算数组的散列码,也可以使用 Guava 库中的Objects.hashCode方法来计算对象的散列码。 此外,为了提高散列表的性能,可以将对象的散列码缓存起来,如果散列码不匹配,就...

    equals 和 hashCode两者效果分析详解.docx

    这个哈希码用于散列数据结构,如HashMap和HashSet。当我们将对象放入这些容器时,它们会使用`hashCode()`来确定对象应该存储的位置。理想的哈希码应确保不同的对象产生不同的值,以最大限度地减少哈希冲突,从而提高...

    Java 中HashCode作用_动力节点Java学院整理

    若该处已经有元素存在,就调用 equals 方法来匹配这两个元素是否相同,相同则不存,不同则散列到其他位置。 这样处理,当我们存入大量元素时就可以大大减少调用 equals() 方法的次数,极大地提高了效率。hashCode ...

    JAVA hashCode使用方法详解

    - 在默认情况下,`Object` 类的 `hashCode()` 方法返回的是对象的内存地址的散列值。然而,当我们自定义类时,为了确保正确的行为,我们应该根据对象的逻辑内容重写 `hashCode()`。 - 如文中所示,例如在 `String`...

    Java重写equals及hashcode方法流程解析

    hashCode方法是Java中Object类的一个方法,用于计算出对象的一个散列值,用于判断在集合中对象是否重复的关键。hashCode方法是一个本地方法,无法在Java代码中实现。 一条重要的定理是:equals相同的对象,hashCode...

    探索Java中的equals()和hashCode()方法_动力节点Java学院整理

    两个obj,如果hashCode()相等,equals()不一定相等(Hash散列值有冲突的情况,虽然概率很低)。所以,可以考虑在集合中,判断两个对象是否相等的规则是:第一步,如果hashCode()相等,则查看第二步,否则不相等;第二...

    java中重写equals()方法的同时要重写hashcode()方法(详解)

    equals() 方法用于比较两个对象的值是否相等,而 hashCode() 方法用于生成对象的哈希码,以便在散列集合中快速存取数据。 重写 equals() 方法 在 Java 中,默认的 equals() 方法是比较对象的引用是否指向同一块...

    详解Java中hashCode的作用

    在Java编程语言中,`hashCode()`方法是一个非常重要的组成部分,特别是在使用散列数据结构如`HashTable`, `HashMap`, `HashSet`等时。`hashCode()`的主要作用是为对象生成一个唯一的整数值,这个值用于确定对象在...

    Java提高篇之hashCode

    在前面三篇博文中LZ讲解了(HashMap、HashSet、HashTable),在其中LZ不断地讲解他们的put和get方法,在这两个方法中计算key的hashCode应该是重要也是精华的部分,所以下面LZ揭开hashCode的“神秘”面纱。...

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

    如果不这样做的话,就会违反 Object.hashCode 的通用约定,从而导致该类无法与所有基于散列值(hash)的集合类结合在一起正常运行。 hashCode() 方法的返回值和 equals() 方法的关系如下: * 如果 x.equals(y) ...

    hashcode

    `hashCode()` 方法是Object类的一个成员,它返回一个整数值,这个值代表了对象的哈希码,也称为散列码或指纹。这个哈希码通常用于快速查找和区分对象,因为不同的对象通常会有不同的哈希码。 哈希码的主要用途在于...

    Java中的hashcode方法介绍

    Java中的`hashCode`方法是Java编程语言中的一个重要概念,它主要与对象的散列处理相关。在Java的`Object`类中定义了一个本地方法(native)`hashCode()`,该方法返回一个`int`类型的数值。这个数值是根据对象的状态...

Global site tag (gtag.js) - Google Analytics