草庐IT

java - 二维数组的快速散列

我正在使用标准的alphabeta修剪搜索算法构建黑白棋播放器。我正在尝试添加一个转换表来存储搜索树中先前计算的节点。所以我需要散列一个表示游戏板(状态)的二维数组并为其存储一个值。我想不出比双for循环迭代我的数组并将所有值相加并乘以偏移量以获得唯一哈希值更好的方法。@OverridepublicinthashCode(){if(dirtyHash){inthash=0;for(inti=0;i我怀疑一定有更聪明的方法来做到这一点?有人有什么想法吗? 最佳答案 我会使用java标准库作为第一次尝试:inthash=java.uti

Java 相当于 Perl 的散列

由于super灵活和方便,我一直在使用很多Perl哈希。例如,在Perl中,我可以执行以下操作:$hash{AREA_CODE}->{PHONE}->{STREET_ADDR}我想知道如何用Java完成同样的事情,我猜它与HashMap有关系?谢谢, 最佳答案 I'vebeenusingalotPerlhashesduetosuperflexibilityandconvenient.forinstance,inPerlIcandothefollowing:$hash{AREA_CODE}->{PHONE}->{STREET_ADDR

Java - 使对象集合友好

如果一个对象拥有唯一的主键,它需要实现哪些接口(interface)才能对集合友好,尤其是在高效排序、可散列等方面...?如果主键是一个字符串,这些接口(interface)如何最好地实现?谢谢! 最佳答案 您必须覆盖Object.equals()和Object.hashCode(),并且还要实现Comparable接口(interface)。这将使您的类在进行任何类型的排序或散列时完全“兼容”,包括使用Collections.sort()、任何Map类或任何Set类。如果该类被放入某种集合中的可能性很小,那么它绝对应该实现所有这三

java - 我可以使用 Object#hashCode 来存储密码的哈希值吗?

为了保存一个文件我定义了下面的方法publicintencrypt(StringfileName,Stringpassword){return(fileName.concat(password)).hashCode();}这将返回存储在文件中的哈希值。每当用户想要访问该文件时,他输入密码,如果生成相同的散列,他就可以访问该文件。我想这不是真的安全,但它有多安全?String#hashCode使用两个不同的输入生成相同散列的可能性有多高?编辑:根据你的回答我修改了代码:publicStringencrypt(Stringpassword){Stringhash="";try{Messag

Hash值是怎么计算的,如何计算hashcode?

hash算法是怎么样的?1、哈希算法(Hash算法,Hash算式,散列算法,消息摘要算法)将任意长度的二进制值映射为较短的固定长度的二进制值,这个小的二进制值称为哈希值。哈希值是一段数据唯一且极其紧凑的数值表示形式。2、hash算法是:一种特殊的函数,不论输入多长的一串字符,只要通过这个函数都可以得到一个固定长度的输出值,这就好像身份证号码一样,永远都是十八位而且全国唯一。哈希算法的输出值就叫做哈希值。3、哈希算法(HashAlgorithm),又称散列算法,是一种从任意数据中提取小的数字的方法。散列算法就是一种以较短的信息来保持数据唯一性的标志,这种标志与数据的每一个字节都相关,而且难以找到

java - 以与顺序无关的方式散列一组整数

我想散列一组整数,这样整数的顺序就不会影响计算的散列值。即H([32224,12232,564423])==H([564423,32224,12232])。唯一集的数量将在数百万范围内。速度非常重要,但我需要知道所选方法的碰撞上限。维基百科关于hashingvectors有一个很好的部分,但我不明白它背后的数学原理,无法自信地在代码中实现它们。如果有人能解释一些代码所涉及的数学,我将不胜感激。理想情况下,我希望最终散列为32位。如果它有用-我将用Java实现它。更新:由于性能原因(对大量此类集合进行操作),我特别希望避免对集合中的整数进行排序。 最佳答案

java - 为什么 Objects.hash() 为相同的输入返回不同的值?

我运行了以下脚本(java),它给了我奇怪的结果。有没有人可以帮忙解释一下?importjava.util.Objects;importorg.apache.log4j.Logger;publicclassCacheTester{privatestaticfinalLoggerlog=Logger.getLogger(CacheTester.class);@TestpublicvoidhashCodeTest(){for(inti=0;iLogResult(各不相同)://...2015-04-2917:43:20INFOCacheTester:42-14319045402015-04

java String hashcode缓存机制

查看Java的String类,我们可以看到哈希码在第一次评估后被缓存。publicinthashCode(){inth=hash;if(h==0&&value.length>0){charval[]=value;for(inti=0;i其中hash是一个实例变量。我有一个问题,为什么我们需要h额外变量? 最佳答案 仅仅是因为hash值在循环中发生变化,没有中间临时变量的解决方案不是线程安全的。考虑在多个线程中调用此方法。假设thread-1开始了hash计算并且它不再是0。片刻之后thread-2在同一对象上调用相同的方法hashC

java - 使用 SHA-512 和 salt 来散列 MD5 散列密码?

我正在开发一个使用MD5(无盐)散列用户密码的系统。我想使用SHA-512和盐更安全地存储密码。虽然这对于future的密码来说很容易实现,但我还想改进现有的MD5散列密码,最好不要强制所有用户更改他们的密码。我的想法是只使用SHA-512和适当的盐来散列现有的MD5散列。然后我可以在数据库中设置一些标志,指示哪些密码是从纯文本散列的,哪些是从MD5散列散列的。或者我可以在对用户进行身份验证时尝试两者。或者甚至只是用MD5然后用SHA-512/salt散列新密码,这样它们就可以像旧密码一样对待。在编程上,我不认为这会是个问题,但我对加密/散列的了解不够,无法知道我是否通过应用SHA-5

java - 哪种哈希算法可以用于重复内容验证?

我有一个xml文件,我需要在其中确定它是否重复。我将对整个xml文件进行哈希处理,或者使用xml文件中的特定xml节点生成某种哈希。md5适合这个吗?还是别的?生成哈希的速度也相当重要,但保证为唯一数据生成唯一哈希更为重要。 最佳答案 MD5已损坏(从某种意义上说,可能会故意生成散列冲突),如果您担心有人恶意创建一个与另一个文件具有相同哈希值的文件。请注意,哈希函数,就其本质而言,不能保证每个可能的输入都有唯一的哈希值。哈希函数的长度有限(例如:MD5的长度为128位,因此有2128种可能的哈希值)。您无法将潜在的无限域映射到有限的