问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

HashCode有多大可能重复

发布网友 发布时间:2022-04-23 02:47

我来回答

1个回答

热心网友 时间:2022-06-04 00:19

hashcode重复的可能性超大,下面是java的缺省算法:

public int hashCode() {

int h = hash;

if (h == 0) {

int off = offset;

char val[] = value;

int len = count;

for (int i = 0; i < len; i++) {

h = 31*h + val[off++];

}

hash = h;

}

return h;

}

但是什么情况下会重复?下面是测试代码

import java.util.HashMap;

public class Test {

static HashMap map = new HashMap();

private static char startChar = 'A';

private static char endChar = 'z';

private static int offset = endChar - startChar + 1;

private static int p = 0;

public static void main(String[] args) {

int len = 3;

char[] chars = new char[len];

tryBit(chars, len);

System.out.println((int)Math.pow(offset, len) + ":" + p);

}

private static void tryBit(char[] chars, int i) {

for (char j = startChar; j <= endChar; j++) {

chars[i - 1] = j;

if (i > 1)

tryBit(chars, i - 1);

else

test(chars);

}

}

private static void test(char[] chars) {

String str = new String(chars).replaceAll("[^a-zA-Z_]", "").toUpperCase();// 195112:0

//String str = new String(chars).toLowerCase();//195112:6612

//String str = new String(chars).replaceAll("[^a-zA-Z_]","");//195112:122500

//String str = new String(chars);//195112:138510

int hash = str.hashCode();

if (map.containsKey(hash)) {

String s = (String) map.get(hash);

if (!s.equals(str)) {

p++;

System.out.println(s + ":" + str);

}

} else {

map.put(hash, str);

// System.out.println(str);

}

}

}

在A-z范围内有特殊字符,从结果看,仅仅3位长度的字符串:

不处理: 138510次重复

去掉字母意外字符: 122500次重复

所有字符转小写:6612次重复(少了很多)

去掉字母意外字符,并且转小写:没有重复!4位字符串也没见重复

不难看出:

1. 缺省实现为英文字母优化

2. 字母大小写可能导致重复

可能:

长字符串可能hashcode重复

中文字符串和特殊字符可能hashcode重复
为什么java中生成32位随机ID永远不会重复?

java对象的散列码hashcode,有32位,有40亿的空间。\x0d\x0a“永远不会重复”,没有说永远,好的散列函数在尽可能大的空间不重复。\x0d\x0a个人认为。\x0d\x0a1、可能重复,但重复后应该有处理机制。不担心重复。\x0d\x0a2、在对象达到相当多的时候(比如10亿个),重复的几率才会变大。

Java提供的字符串Hashcode,有多大可能重复

Hashcode是一个提供检测是否重复的关键字,用于hashmap容器中,因为其容器存在键值对,另外它的key是不能重复的,所以通过hashcode()方法和eqauls方法来确认它是否是重复保证key的唯一性.

为什么java中生成32位随机ID永远不会重复。

、纳秒级时间、芯片ID码和许多可能的数字。由以下几部分的组合:当前日期和时间(UUID的第一个部 分与时间有关,如果你在生成一个UUID之后,过几秒又生成一个UUID,则第一个部分不同,其余相同),时钟序列,全局唯一的IEEE机器识别号(如果有网卡,从网卡获得,没有网卡以其他方式获得),UUID的唯一缺...

java里equals和hashCode之间什么关系

equals与hashcode的关系是:两个对象在equals相等的情况下,hashcode有可能相等也有可能不相等,而两个对象在hashcode不相等的情况下,equals也必定不相等。理解equals的应用:它是用于用户在进行对比的时候,这个时候对比的是内容是否相等理解hashcode的应用:例如set集合,它的不可重复,进行对比的便是hashcode...

java中“hashcode”什么时候用?怎么用?

首先,想要明白hashCode的作用,你必须要先知道Java中的集合。 \x0d\x0a总的来说,Java中的集合(Collection)有两类,一类是List,再有一类是Set。 \x0d\x0a你知道它们的区别吗?前者集合内的元素是有序的,元素可以重复;后者元素无序,但元素不可重复。 \x0d\x0a那么这里就有一个比较严重...

hashCode 原理

关于 hashCode 的原理,网上普遍的说法是它代表对象的内存地址,但考虑到垃圾回收过程中对象可能会被移动,从而改变其地址,这种说法并不完全准确。实际上,hashCode 保存在对象的头部分,而非内存地址本身。这种设计避免了重复到已被回收对象的地址的问题。详细对象头的解释可参考相关文章。在理解了 hashCode...

equals和hashcode谁的效率更高?为什么?谢谢解答

其实不能说谁比谁高,是hashcode+equals 效率最高 比如在hashset中,已经有1000个数据 如果只用equals,插入第1001个数据时,需要依次和前1000个比 如果用hashcode,可将前面数据的范围缩小(不同对象的hashcode可能相等),这样如果hashcode如果不同,直接false,相同时调用equals方法进一步确认 ...

java 中 equals() 相等的两个对象,hashcode() 一定相等

在java中,equals和hashcode是有设计要求的,equals相等,则hashcode一定相等,反之则不然。为何会有这样的要求?在集合中,比如HashSet中,要求放入的对象不能重复,怎么判定呢?首先会调用hashcode,如果hashcode相等,则继续调用equals,也相等,则认为重复。如果重写equals后,如果不重写hashcode,则hashcode就...

Java中HashMap和TreeMap的区别深入理解

HashMap:数组方式存储key/value,线程非安全,允许null作为key和value,key不可以重复,value允许重复,不保证元素迭代顺序是按照插入时的顺序,key的hash值是先计算key的hashcode值,然后再进行计算,每次容量扩容会重新计算所以key的hash值,会消耗资源,要求key必须重写equals和hashcode方法 默认初始容量16,...

java Long.hashCode(),返回的是int 类型,是如何保证hash值不重复的

就是 int hashCode(long l){ int *p=&amp;l; return (*p)^(*(p+1));}测试 public static void main(String[] args){ long rand = new Random().nextInt(); long l = (rand &lt;&lt; Integer.SIZE) | rand; System.out.println(Long.hashCode(l));}返回结果为:0 ...

Code Geass excel找重复数据 Code::Blocks Code vein Postcode 重复 重复的意思 重复值 重复构成
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
锂电池3.7v和3.8v有什么区别呢? 从石岐百佳附近怎样乘车到五桂山逍遥谷? 保护板3.75V电压高吗?? 寝馈其中是什么意思怎么读 寝馈不安的意思 寝馈怎么读音是什么意思 《武林群侠传》流程攻略 《侠客风云传》各类内功心法效果一览介绍_《侠客风云传》各类内功心法效... 《侠客风云传》天王归来DLC玩法小提示介绍_《侠客风云传》天王归来DL... 武林群侠传中在逍遥谷练功在去拜寿怎么谁也打不过啊? java中equals方法和hashcode方法的问题 Java 中的hashcode到底是什么啊?怎样判断两个元素或者对象的hashcode是否就相同了 Java中HashSet类的hashCode方法如何重写,有什么作用? 请问java中重写hashcode的作用 何时才要重写hashcode 有谁知道云南彝族关于茶的故事,传说与渊源。谢谢麻烦各位 如何生成一个合适的hashcode方法 普洱茶的发明者 重写hashCode中为什么基本都是乘以31 如何正确实现Java中的hashCode方法 求普洱茶的由来。为什么叫普洱茶? Java中的HashCode问题 普洱历史,故事,传统,文化,好处 如何重写hashcode方法 关于hashcode的问题 普洱茶历史的介绍 问一个java中关于hashcode的问题 hash code是什么 hashCode重载时的疑问,prime为啥是31而不是其他 普洱茶历史的普洱茶的来由 为什么在定义hashcode时要使用31这个数 java 求组合写hashCode的技巧 关于hashCode()的模拟代码 苹果手机怎么在日历上标记生日? iPhone在系统日历上怎么设置自己生日? 苹果日历怎么设置生日 苹果手机日历怎么添加生日 苹果怎么设置生日 如何让iphone的日历显示农历生日 苹果日历怎么添加生日 iphone怎么在日历中添加生日 苹果手机日历如何同步通讯录生日? 笔记本闪屏死机是什么原因 笔记本闪屏怎么处理? 笔记本屏幕闪屏怎么回事? 我梦到自己的车丢了,怎么也找不到,梦工醒后车还在,有什么征兆? 笔记本电脑屏幕突然闪烁,然后死机动不了 如何解决笔记本闪屏后死机的问题 笔记本闪屏如何解决 戴尔笔记本电脑出现闪屏是怎么回事? 笔记本电脑突然闪屏怎么回事呢