Java中string中hashcode_为什么String中的Java hashCode()使用31作为乘数?
从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作为乘数?相关推荐
- java gettext返回值_012-关于EditText中的getText()方法的返回值类型以及string的转换问题(转)...
EditText中的getText()方法的返回值为CharSequence,如果我们想要获得string类型数据的话,需要在后边加上.toString 另外,String类型转为int:Intege ...
- mybatis中传集合时 报异常 invalid comparison: java.util.Arrays$ArrayList and java.lang.String
mybatis中传集合时 报异常 invalid comparison: java.util.Arrays$ArrayList and java.lang.String 参考文章: (1)mybati ...
- 为什么String中的Java hashCode()使用31作为乘数?
本文翻译自:Why does Java's hashCode() in String use 31 as a multiplier? Per the Java documentation, the h ...
- java中字符串的创建_【转载】 Java中String类型的两种创建方式
本文转载自 https://www.cnblogs.com/fguozhu/articles/2661055.html Java中String是一个特殊的包装类数据有两种创建形式: String s ...
- java中String类是什么_Java中的String类
/* String类用于描述字符串事物的 那么它就提供了多个方法对字符串进行操作 方法都会用,字符串这块就结束了 常见的操作有哪些? "abcd" 它应该具备什么功能,我们才能更好 ...
- java string 后几位_java中String占几个位元组
java中String占几个位元组以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! java中String占几个位元组 J ...
- Java中string字符串的值_Java中的字符串(String)
一.基本概念: 字符串是一系列字符串的序列.在Java语言中字符串是用一对对双引号"",括起来的字符系列.例如"Hello","你好".从数 ...
- java string 不变_为什么String在java中是不可变的?
什么是不可变对象? 众所周知, 在Java中, String类是不可变的.那么到底什么是不可变的对象呢? 可以这样认为:如果一个对象,在它创建完成之后,不能再改变它的状态,那么这个对象就是不可变的.不 ...
- 阿里最新面试必备项之Java的String类,持续更新中!
最新腾讯面试必备项之Java的String类,持续更新中! 1.1 String的特性 String类:代表字符串.Java程序中的所有字符串字面值(如"abc")都作为此类的实例 ...
- [Leetcode][第557题][JAVA][反转字符串中的单词 III][遍历][String函数]
[问题描述][简单] [解答思路] 1. 遍历 开辟一个新字符串.然后从头到尾遍历原字符串,直到找到空格为止,此时找到了一个单词,并能得到单词的起止位置.随后,根据单词的起止位置,可以将该单词逆序放到 ...
最新文章
- 目标管理和任务协作,用智办事更方便
- 金秋十月正当时,未知君招人啦!
- Spring Cloud Contract 契约测试实践
- 凯利公式判定持仓比例
- mongoose 定义经纬度数据类型
- 下班到点想走,但老员工都没动,怎么办?
- 短信语音验证码发展的必然趋势
- mysql丢失一条事务_SpringBoot之MySQL数据的丢失的元凶--事务(转)
- paip.asp vbs的代码折叠代码结构查看
- java解析魔兽争霸3录像_GitHub - wucao/jw3gparser: Java Warcraft Ⅲ Replay Parser(Java解析《魔兽争霸3》游戏录像工具)...
- 数据结构实验报告——线性表
- axios中文文档整理
- STM32——PS2遥控手柄
- nexus5 博通芯片WIFI详解 (3)
- 深度操作系统20.6发布
- 【毕业设计】大数据股票分析与预测系统 - python LSTM
- 模态框-model dialog
- 电脑管家怎么关闭右键深度加速(小火箭)功能
- 计算机专业英语时间跨度,这是我见过的最变态的英语考试,没有之一
- CS信号(片选信号)经常都是低电平有效
热门文章
- 使用app-inspector时报错connect ECONNREFUSED 127.0.0.1:8001的解决方案
- 飞猪信息流内容推荐探索
- Python3解决modulenotfounderror: no module named‘_bz2‘
- 错过后悔十年!计算机视觉入门到精通,学习书籍推荐
- 重磅福利!程序员面试——算法工程师面试大全第五部分
- 浙大 PAT b1023
- 【岗位详情】腾讯广告策略产品经理(北京)
- 腾讯基于预训练模型的文本内容理解实践
- qt建立c++工程导入项目_工程项目经理A、B、C、D四个等级的区别,你知道吗?
- python读取git日志_使用python分析git log日志示例