从JDK-4045622开始,Joshua Bloch描述了选择特定(新) String.hashCode() 实施的原因

下表总结了上述各种哈希函数的性能,对于三个数据集:1)Merriam-Webster的第二个国际未删节字典中的所有单词和短语(311,141个字符串,平均长度为10个字符) . 2)/ bin /,/ usr / bin /,/ usr / lib /,/ usr / ucb /和/ usr / openwin / bin / *(66,304字符串,平均长度为21个字符)中的所有字符串 . 3)昨晚运行了几个小时的网络爬虫收集的URL列表(28,372个字符串,平均49个字符) . 表中所示的性能度量是散列表中所有元素的“平均链大小”(即,与查找元素相比,密钥数量的预期值) . Webster的代码字符串URL

当前的Java Fn . 1.2509 1.2738 13.2560

P(37)[Java] 1.2508 1.2481 1.2454

P(65599)[Aho等] 1.2490 1.2510 1.2450

P(31)[K R] 1.2500 1.2488 1.2425

P(33)[Torek] 1.2500 1.2500 1.2453

Vo的Fn 1.2487 1.2471 1.2462

WAIS Fn 1.2497 1.2519 1.2452

Weinberger的Fn(MatPak)6.5169 7.2142 30.6864

Weinberger的Fn(24)1.3222 1.2791 1.9732

Weinberger的Fn(28)1.2530 1.2506 1.2439

看看这个表,很明显除了当前的Java函数和Weinberger函数的两个破坏版本之外的所有函数都提供了极好的,几乎无法区分的性能 . 我强烈推测这种性能本质上是“理论上的理想”,如果你用一个真正的随机数发生器来代替散列函数,那就是你所得到的 . 我排除了WAIS函数,因为它的规范包含随机数页面,并且它的性能并不比任何更简单的函数更好 . 其余六个功能中的任何一个看起来都是很好的选择,但我们必须选择一个 . 我想我会排除Vo的变体和Weinberger的功能,因为它们增加了复杂性,尽管很小 . 在剩下的四个中,我可能选择P(31),因为它是在RISC机器上计算最便宜的(因为31是2的两个幂的差异) . P(33)计算起来同样便宜,但它的表现稍微差一点,而且33是复合的,这让我有点紧张 . 玩笑

Java中string中hashcode_为什么String中的Java hashCode()使用31作为乘数?相关推荐

  1. java gettext返回值_012-关于EditText中的getText()方法的返回值类型以及string的转换问题(转)...

    EditText中的getText()方法的返回值为CharSequence,如果我们想要获得string类型数据的话,需要在后边加上.toString 另外,String类型转为int:Intege ...

  2. mybatis中传集合时 报异常 invalid comparison: java.util.Arrays$ArrayList and java.lang.String

    mybatis中传集合时 报异常 invalid comparison: java.util.Arrays$ArrayList and java.lang.String 参考文章: (1)mybati ...

  3. 为什么String中的Java hashCode()使用31作为乘数?

    本文翻译自:Why does Java's hashCode() in String use 31 as a multiplier? Per the Java documentation, the h ...

  4. java中字符串的创建_【转载】 Java中String类型的两种创建方式

    本文转载自 https://www.cnblogs.com/fguozhu/articles/2661055.html Java中String是一个特殊的包装类数据有两种创建形式: String s ...

  5. java中String类是什么_Java中的String类

    /* String类用于描述字符串事物的 那么它就提供了多个方法对字符串进行操作 方法都会用,字符串这块就结束了 常见的操作有哪些? "abcd" 它应该具备什么功能,我们才能更好 ...

  6. java string 后几位_java中String占几个位元组

    java中String占几个位元组以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! java中String占几个位元组 J ...

  7. Java中string字符串的值_Java中的字符串(String)

    一.基本概念: 字符串是一系列字符串的序列.在Java语言中字符串是用一对对双引号"",括起来的字符系列.例如"Hello","你好".从数 ...

  8. java string 不变_为什么String在java中是不可变的?

    什么是不可变对象? 众所周知, 在Java中, String类是不可变的.那么到底什么是不可变的对象呢? 可以这样认为:如果一个对象,在它创建完成之后,不能再改变它的状态,那么这个对象就是不可变的.不 ...

  9. 阿里最新面试必备项之Java的String类,持续更新中!

    最新腾讯面试必备项之Java的String类,持续更新中! 1.1 String的特性 String类:代表字符串.Java程序中的所有字符串字面值(如"abc")都作为此类的实例 ...

  10. [Leetcode][第557题][JAVA][反转字符串中的单词 III][遍历][String函数]

    [问题描述][简单] [解答思路] 1. 遍历 开辟一个新字符串.然后从头到尾遍历原字符串,直到找到空格为止,此时找到了一个单词,并能得到单词的起止位置.随后,根据单词的起止位置,可以将该单词逆序放到 ...

最新文章

  1. 目标管理和任务协作,用智办事更方便
  2. 金秋十月正当时,未知君招人啦!
  3. Spring Cloud Contract 契约测试实践
  4. 凯利公式判定持仓比例
  5. mongoose 定义经纬度数据类型
  6. 下班到点想走,但老员工都没动,怎么办?
  7. 短信语音验证码发展的必然趋势
  8. mysql丢失一条事务_SpringBoot之MySQL数据的丢失的元凶--事务(转)
  9. paip.asp vbs的代码折叠代码结构查看
  10. java解析魔兽争霸3录像_GitHub - wucao/jw3gparser: Java Warcraft Ⅲ Replay Parser(Java解析《魔兽争霸3》游戏录像工具)...
  11. 数据结构实验报告——线性表
  12. axios中文文档整理
  13. STM32——PS2遥控手柄
  14. nexus5 博通芯片WIFI详解 (3)
  15. 深度操作系统20.6发布
  16. 【毕业设计】大数据股票分析与预测系统 - python LSTM
  17. 模态框-model dialog
  18. 电脑管家怎么关闭右键深度加速(小火箭)功能
  19. 计算机专业英语时间跨度,这是我见过的最变态的英语考试,没有之一
  20. CS信号(片选信号)经常都是低电平有效

热门文章

  1. 使用app-inspector时报错connect ECONNREFUSED 127.0.0.1:8001的解决方案
  2. 飞猪信息流内容推荐探索
  3. Python3解决modulenotfounderror: no module named‘_bz2‘
  4. 错过后悔十年!计算机视觉入门到精通,学习书籍推荐
  5. 重磅福利!程序员面试——算法工程师面试大全第五部分
  6. 浙大 PAT b1023
  7. 【岗位详情】腾讯广告策略产品经理(北京)
  8. 腾讯基于预训练模型的文本内容理解实践
  9. qt建立c++工程导入项目_工程项目经理A、B、C、D四个等级的区别,你知道吗?
  10. python读取git日志_使用python分析git log日志示例