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

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

    一.hashCode契约

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

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

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

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

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

     

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

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

    二.哈希码冲突

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

    三.哈希码可变

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

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

  • 相关阅读:
    [华为]字符串反转
    [华为]字符个数统计
    [华为]字符串分隔
    [华为]计算字符个数
    [华为]字符串最后一个单词的长度
    感悟-思考-生活
    [百度校招]打印全排列
    [阿里]逆序打印整数,要求递归实现
    [百度]数组中去掉连续重复的数字,只保留1个
    百度NLP三面
  • 原文地址:https://www.cnblogs.com/xiaoguozi0218/p/4751949.html
Copyright © 2011-2022 走看看