栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

hashCode唯一性

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

hashCode唯一性

给定合理的对象集合,很可能会有两个具有相同的哈希码。在最好的情况下,它成为生日问题,与数以万计的对象发生冲突。在实践中,使用相对较小的可能的哈希码池创建的对象,仅数千个对象就很容易发生冲突。

使用内存地址只是获得一个稍微随机数的一种方法。Sun
JDK源有一个开关,可以使用安全随机数生成器或常数。我相信IBM(曾经使用过?)使用了快速随机数生成器,但它一点也不安全。文档中提到的内存地址似乎具有历史性(大约十年前,具有固定位置的对象句柄并不罕见)。

这是几年前我编写的一些代码,用于演示冲突:

class HashClash {    public static void main(String[] args) {        final Object obj = new Object();        final int target = obj.hashCode();        Object clash;        long ct = 0;        do { clash = new Object(); ++ct;        } while (clash.hashCode() != target && ct<10L*1000*1000*1000L);        if (clash.hashCode() == target) { System.out.println(ct+": "+obj+" - "+clash);        } else { System.out.println("No clashes found");        }    }}

RFE来澄清文档,因为这太经常出现了:CR
6321873



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/595367.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号