zoukankan      html  css  js  c++  java
  • 关于hashCode()的3件事

    在Java中,每一个对象都有一个容易理解但是任然有时候被遗忘或者被误用的hashcode()方法.这里有3件事情要时刻牢记以避免常见的陷阱.

    一.hashCode契约

    这个契约在hashcode方法的JavaDoc中进行了阐述.它可以大致的归纳为下面几点:

    1.在一个运行的进程中,相等的对象必须要有相同的哈希码.

    请注意这并不意味着以下的常见的误解:

    2.不相等的对象一定有着不同的哈希码------>错!

    3.有同一个哈希值的对象一定相等.--------->错!

     

    通过上图可以帮助理解契约规则.

    这个契约允许不同的对象共享相同的哈希码.

    二.哈希码冲突

    任何时候,两个不同对象有相同的哈希码,我们称之为冲突.冲突不要紧,它只是意味着有多个对象在同一个空间里,所以HashMap会再检查一遍来找正确的对象.大量的冲突将会降低系统的性能,但是它们不会导致错误的结果.

    三.哈希码可变

    最后,在哈希码的契约中,有一个很重要的细节是相当让人吃惊的:hashcode并不保证在不同的应用执行中的得到相同的结果.让我们看一看Java文档:

      在一次Java应用的执行中,对于同一个对象,hashcode方法必须始终返回相同的整数,但这整数不反映对象是否被修改(equals比较)的信息.同一个应用的不同执行,该整数不必保持一致.

  • 相关阅读:
    ul不加宽高
    获取元素的外部样式问题
    设置定时器、重启定时器要注意的问题
    php的var关键字
    抽象类(abstract class)和 接口(interface)
    __sleep和__wakeup
    类型约束
    TensorFlow 拾遗
    Datasets and Evaluation Metrics used in Recommendation System
    触龙——可解释推荐系统
  • 原文地址:https://www.cnblogs.com/xiaoguozi0218/p/4751949.html
Copyright © 2011-2022 走看看