我正在通过 Java的hash方法实现put方法,并且遇到了这个:
// Makes sure the key is not already in the hashtable.
    Entry tab[] = table;
    int hash = key.hashCode();
    int index = (hash & 0x7FFFFFFF) % tab.length;
    for (Entry<K,V> e = tab[index] ; e != null ; e = e.next) {
        if ((e.hash == hash) && e.key.equals(key)) {
            V old = e.value;
            e.value = value;
            return old;
        }
    }

虽然我知道需要一个密钥来检查冲突,但为什么Java存储密钥的哈希值并检查它?

解决方法

因为%tab.length操作,相同的桶(标签)可以保存具有不同散列的项目.首先检查哈希可能是一些性能优化,以避免在哈希值不同时调用equals().

举一个这样的例子:假设你有两个带有昂贵的equals()方法的复杂对象.一个对象具有等于1的散列,而另一个对象具有32的散列.如果将两个对象放在具有31个桶的散列表中,它们将最终位于同一个桶(选项卡)中.添加第二个(不同的对象)时,必须确保它还没有在表中.您可以立即使用equals(),但这可能会更慢.相反,你首先比较哈希,如果没有必要,避免代价高昂的等于().在这个例子中,哈希是不同的(尽管在同一个桶中)所以equals()不是必需的.

为什么HashTable在java中存储表中键的哈希值的更多相关文章

  1. ios – 重新创建Persistant Store后的核心数据错误

    在我的应用程序中,我能够清除数据库中的所有数据.完成此操作后,将解析捆绑的JSON,然后将其保存到数据库(以便将数据库返回到默认状态).解析和保存此JSON的操作在任何情况下都可正常工作,除非在清除并重新创建持久性存储之后,在这种情况下我得到’NSinvalidargumentexception’,原因:’无法从此NSManagedobjectContext的协调器访问对象的持久存储’.在保存在后

  2. core-data – 错误: – [UIImage _deleteExternalReferenceFromPermanentLocation]无法识别的选择器发送到实例

    当我删除包含图像的托管对象时,在外部记录中存储为可转换值,然后我崩溃并出现此错误:解决方法我在AppleDeveloperforums回答了类似的事情.我猜你在数据建模器中的那个字段上选择了外部存储复选框.有一个bug可以解决.我是这样做的:一旦更新了数据并保存了上下文,任何删除它的尝试都会引发这个“无法识别的选择器”异常.要强制可以响应_deleteExternalReferenceFromPe

  3. ios – 通过objectID获取NSManagedObjects数组返回空数组

    TL;DR其持久性存储协调器不再在内存中的NSManagedobjectID会丢失其NSEntityDescription(实体),并且不会将等同于来自不同持久性存储协调器的NSManagedobjectID,即使它们的URIRepresentation相同也是如此.沿着兔子洞甜蜜……),因为这些objectID来自的PSC现在不再在内存中,并且NSManagedobjectID必须保持对必须由PSC持有的NSEntityDescription(实体)的一周引用.正如评论者所怀疑的那样,零实体似乎会引起问

  4. ios – NSPersistentStoreCoordinator有两种类型的持久存储?

    在iOS应用程序中,我想使用NSPersistentStoreCoordinator和NSIncrementalStore子类,用于从RESTAPI获取数据,也可以使用sqlite存储来保存到磁盘.但是,如果我将两种类型的持久性存储添加到我的协调器中,那么在我的托管对象上下文中调用save:没有任何效果.如果我只添加一个持久存储,而不是我的NSIcrementalStore子类的类型,那么保存按照

  5. ios – 如何在RubyMotion中创建字符串的md5哈希

    我有一封电子邮件,想从gravatar.com中提取相应的图片使用ruby,很容易:由于RubyMotion中没有require方法,如何从电子邮件生成哈希?解决方法一种可能性是使用“NSDataMD5”cocoapod.通过将其添加到您的Rakefile来安装它:然后你可以像这样使用它:

  6. Swift37/90Days - iOS 中的设计模式 (Swift 版本) 02

    )更新声明翻译自IntroducingiOSDesignPatternsinSwift–Part2/2,本教程objc版本的作者是EliGanem,由vincentNgo更新为Swift版本。如何使用适配器模式横滑的滚动栏理论上应该是这个样子的:新建一个Swift文件:HorizontalScroller.swift,作为我们的横滑滚动控件,HorizontalScroller继承自UIView。在HorizontalScroller类里添加一个新的委托对象:为了避免循环引用的问题,委托是weak类型。H

  7. OpenStack对象存储――Swift

    Swift前身是RackspaceCloudFiles项目,随着Rackspace加入到OpenStack社区,于2010年7月贡献给OpenStack,作为该开源项目的一部分。Swift目前的最新版本是OpenStackEssex1.5.1。Swift特性在OpenStack官网中,列举了Swift的20多个特性,其中最引人关注的是以下几点。在OpenStack中还可以与镜像服务Glance结合,为其存储镜像文件。Auth认证服务目前已从Swift中剥离出来,使用OpenStack的认证服务Keysto

  8. 对象存储系统Swift技术详解:综述与概念

    通过阅读Swift的技术文档,我们可以理解其中的设计的原理和实现的方法。本人于9月底开始接触swift,刚开始看文档的时候一知半解,有幸阅读了zzcase等人的博客,才得以入门。随着对swift设计原理的理解和源码的深入,文档经过数次反复的修改,希望对各位学习swift的童鞋有所帮助,水平有限,若各位发现有错误之处,恳请指出。

  9. Swift2.0语言教程之类的属性

    Swift2.0语言教程之类的属性类虽然函数可以简化代码,但是当一个程序中出现成百上千的函数和变量时,代码还是会显得很混乱。Swift2.0语言的类与对象类是一种新的数据类型,类似于生活中犬类、猫类等等。Swift2.0语言中类的组成在一个类中通常可以包含如图8.1所示的内容。Swift2.0语言存储属性存储属性就是存储特定类中的一个常量或者变量。

  10. Swift- 枚举中的rawValue和hashValue

    成员值仅仅是一组抽象的符号,不能参与任何运算,也不代表任何数据类型!4)原始值的推断:在Swift中只有Int型的原始值可以推断,其余类型包括Double、String、Character类型都无法在原始值中推断;这里的推断是指不用给出所有成员值的原始值而只需要给定一部分即可,其余的原始值Swift可以自动推断出,但是这里就只有Int类型的支持原始值推断,而推断的方法和C语言的枚举类型一样:enumWeekDays:Int{

随机推荐

  1. 基于EJB技术的商务预订系统的开发

    用EJB结构开发的应用程序是可伸缩的、事务型的、多用户安全的。总的来说,EJB是一个组件事务监控的标准服务器端的组件模型。基于EJB技术的系统结构模型EJB结构是一个服务端组件结构,是一个层次性结构,其结构模型如图1所示。图2:商务预订系统的构架EntityBean是为了现实世界的对象建造的模型,这些对象通常是数据库的一些持久记录。

  2. Java利用POI实现导入导出Excel表格

    这篇文章主要为大家详细介绍了Java利用POI实现导入导出Excel表格,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  3. Mybatis分页插件PageHelper手写实现示例

    这篇文章主要为大家介绍了Mybatis分页插件PageHelper手写实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  4. (jsp/html)网页上嵌入播放器(常用播放器代码整理)

    网页上嵌入播放器,只要在HTML上添加以上代码就OK了,下面整理了一些常用的播放器代码,总有一款适合你,感兴趣的朋友可以参考下哈,希望对你有所帮助

  5. Java 阻塞队列BlockingQueue详解

    本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景,通过实例代码介绍了Java 阻塞队列BlockingQueue的相关知识,需要的朋友可以参考下

  6. Java异常Exception详细讲解

    异常就是不正常,比如当我们身体出现了异常我们会根据身体情况选择喝开水、吃药、看病、等 异常处理方法。 java异常处理机制是我们java语言使用异常处理机制为程序提供了错误处理的能力,程序出现的错误,程序可以安全的退出,以保证程序正常的运行等

  7. Java Bean 作用域及它的几种类型介绍

    这篇文章主要介绍了Java Bean作用域及它的几种类型介绍,Spring框架作为一个管理Bean的IoC容器,那么Bean自然是Spring中的重要资源了,那Bean的作用域又是什么,接下来我们一起进入文章详细学习吧

  8. 面试突击之跨域问题的解决方案详解

    跨域问题本质是浏览器的一种保护机制,它的初衷是为了保证用户的安全,防止恶意网站窃取数据。那怎么解决这个问题呢?接下来我们一起来看

  9. Mybatis-Plus接口BaseMapper与Services使用详解

    这篇文章主要为大家介绍了Mybatis-Plus接口BaseMapper与Services使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  10. mybatis-plus雪花算法增强idworker的实现

    今天聊聊在mybatis-plus中引入分布式ID生成框架idworker,进一步增强实现生成分布式唯一ID,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

返回
顶部