关于hashCode,你一定听说过会重复,那么你见过2个不同的字符串hashCode值却是相同的吗
来源:互联网 发布:java实现web服务器 编辑:程序博客网 时间:2024/06/14 21:10
java中String.hashCode()方法的算法如下:str.charAt(0) * 31n-1 + str.charAt(1) * 31n-2 + ... + str.charAt(n-1)
据说算法中31这个数字是对英文字符进行优化后产生的一个最佳数字,但是碰上字母大小写或是一些特殊字符,再或者是中文字符,它就不灵了,很容易重复,举个例子:
1.java中所有的对象都有一个父类Object,而Object类都有hashCode方法,也就是说java中所有的类均会有hashCode方法;
2.Object类的hashCode方法是native的,即是通用C语言来写的,本文举例使用的是String类,自己重写了hashCode方法,算法即如下:
String.hashCode()=str.charAt(0) * 31n-1 + str.charAt(1) * 31n-2 + ... + str.charAt(n-1)
3.String类的hashCode算法是固定的,根据算法就可以看到是可能会存在相同hashCode的
4.再强调一点,两个String的hashCode相同并不代表着equals比较时会相等,他们两者之间是没有必然关系,这一点可以看看equals方法的实现
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = count;
if (n == anotherString.count) {
char v1[] = value;
char v2[] = anotherString.value;
int i = offset;
int j = anotherString.offset;
while (n-- != 0) {
if (v1[i++] != v2[j++])
return false;
}
return true;
}
}
return false;
}
转载自:http://blog.csdn.net/hl_java/article/details/71511815
- 关于hashCode,你一定听说过会重复,那么你见过2个不同的字符串hashCode值却是相同的吗
- 关于hashCode,你一定听说过会重复,那么你见过2个不同的字符串hashCode值却是相同的吗
- hashSet根据compareTo()方法的写法不同,hashSet是可以加入重复元素的(即使这2个元素的hashCode相同)。
- Java的hashCode相同的字符串
- 如果2个非null对象==,则他们的equals,hashCode一定相等吗?
- 关于 hashCode() 你需要了解的 3 件事
- 关于 hashCode() 你需要了解的 3 件事
- 关于 hashCode() 你需要了解的 3 件事
- 关于 hashCode() 你需要了解的 3 件事
- 关于 hashCode() 你需要了解的 3 件事
- 关于 hashCode() 你需要了解的 3 件事
- 关于 hashCode() 你需要了解的 3 件事
- 关于hashCode你必须要知道的三件事
- 关于 hashCode() 你需要了解的 3 件事
- 关于 hashCode() 你需要了解的 3 件事
- 你可能没听说过(但应该会用到的)15 个免费 API
- 让你彻底理解hashCode的作用
- hashCode和identityHashCode的区别你知道吗?
- 哪款软件可以实现基于多张二维图像的三维重建?
- javascript正则表达式
- navicat连接oracle数据库
- geowebcache发布arcgis切片
- adminLTE 教程 -6 多box
- 关于hashCode,你一定听说过会重复,那么你见过2个不同的字符串hashCode值却是相同的吗
- AlertDialogActivity弹框
- NYOJ 部分和问题
- JSTL中的Core标签库总结(一)
- Programming Amazon EC2.pdf 英文原版 免费下载
- adminLTE 教程 -7 进度条
- Linux(CentOs) 下安装Redis
- 带你逐步深入了解SSH框架——hibernate入门和基本操作
- 深入分析java web 的ClassLoader工作机制(一)