草庐IT

哈希切割

全部标签

java - 如何使哈希码(整数值)为正

intx=10;inty=(x.hashcode()&0xfffffff);上面的代码怎么总是让ypositive?谢谢! 最佳答案 x.hashcode()&0xfffffff将关闭符号位。此处未使用Math.abs,因为如果x.hashCode等于Integer.MIN_VALUE,它将返回负数,这将使哈希表的数组抛出一个ArrayOutOfBoundException,这不是您想要的。来自@JonSkeet的评论:它不仅会关闭符号位,还会清除接下来的三位。但是对于散列码,我们一直在处理冲突,所以它被认为是好的。

java - 哈希表:为什么get方法是同步的?

我知道Hashtable是同步的,但为什么它的get()方法是同步的?难道只有读方法吗? 最佳答案 如果读取不同步,则可以在读取执行期间修改哈希表。可以添加新元素,底层数组可能变得太小,可以用更大的数组替换等。如果没有顺序执行,很难处理这些情况。但是,即使get不会在Hashtable被另一个线程修改时崩溃,synchronized关键字还有另一个重要方面,即缓存同步。让我们使用一个简化的例子:classFlag{boolvalue;boolget(){returnvalue;}//WARNING:notsynchronizedsy

java - 字符串的哈希码是唯一的吗?

最近,我遇到了一段代码,其中Map被使用,其中Integer(键)是hashCode一些字符串和String对应的值。这是正确的做法吗?因为现在,equals不会为String调用打电话时get.(get也是使用String对象上的hashCode()方法完成的。或者,hashCode(s)对于唯一的字符串是唯一的?我检查了equals欧德String类(class)。有为此编写的逻辑。我很困惑。 最佳答案 HashMap确实使用equals()来比较键。它只使用hashCode()来查找key所在的bucket,因此比equals

java - 为什么 HashMap.put 既比较哈希值又测试相等性?

我分析了Java中的HashMap源码,得到一个关于put方法的问题。JDK1.6中的put方法如下:publicVput(Kkey,Vvalue){if(key==null)returnputForNullKey(value);inthash=hash(key.hashCode());inti=indexFor(hash,table.length);for(Entrye=table[i];e!=null;e=e.next){Objectk;if(e.hash==hash&&((k=e.key)==key||key.equals(k))){VoldValue=e.value;e.val

java - 创建帐户时,如何将密码哈希安全地存储在内存中?

我们基于Web的应用程序将用户帐户绑定(bind)到使用帐户创建期间指定的密码的用户。在Java的情况下,在将其哈希值保存在数据库中之前,如何安全地处理密码。更具体地说,如何确保包含密码的字符串在足够短的时间间隔内被垃圾回收? 最佳答案 如果有可能(在web应用程序中可能比较困难),最好将密码存储在字符数组中,而不是存储在字符串中。如果您完成存储密码,您可以使用Array.fill()在内存中覆盖它。并通过丢弃它使垃圾收集器可以使用该引用:Arrays.fill(password,'');password=null;我只是注意到取消

java - 多线程环境下的 HashMap 和哈希表

我真的很困惑这两个集合在多线程环境中的表现。哈希表是同步的,这意味着不会有2个线程同时更新它的值,对吧? 最佳答案 看ConcurrentHashMaps表示线程安全映射。它们提供了HashTable的所有功能,并且性能非常接近HashMap。性能是通过使用map范围锁而不是使用mapwidelock获得的,默认情况下该集合维护一个包含16个锁的列表,每个锁用于锁定map的一个bucket。您甚至可以配置桶的数量:)根据您的数据调整此项可以帮助提高性能。BrianGoetz的《Java并发实践》我怎么推荐都不为过http://jci

java - 如何创建一个包含字符串和对象哈希表条目的 JList?

我想创建一个包含字符串和对象哈希表条目的JList:HashtableJList元素应包含哈希表条目并显示作为字符串的条目键的值...这可能吗?怎么做到的? 最佳答案 通过扩展AbstractListModel实现ListModel接口(interface)。使用派生模型创建您的JList。另见HowtoUseLists. 关于java-如何创建一个包含字符串和对象哈希表条目的JList?,我们在StackOverflow上找到一个类似的问题: https:/

Java:获取对象的唯一哈希值

我正在尝试为一个Java对象获取一个唯一的哈希值,例如以下情况为真:如果A==B则A.HashValue()==B.Hash.HashValue()如果A!=B那么A.HashValue()!=B.HashValue()假设对象包含几个boolean值和整数字段。 最佳答案 //非常重要的编辑...Gjorgji,我知道你认为下面的答案是正确的,但我发现它是不正确的。如果你有这样的类:classtiny{inta;publicinthashCode(){returna;}}您已经用完了所有可能的哈希码。(如果不清楚原因,请说明。)因

java - 当值的哈希集为空时删除 HashMap 中的键

我有一个将字符串键映射到哈希集值的HashMap,我想在HashMap的哈希集值为空时从HashMap中删除一个键。我在处理这个问题时遇到了麻烦。这是我尝试过的方法,但我很困惑:for(Map.Entry>entr:stringIDMap.entrySet()){Stringkey=entr.getKey();if(stringIDMap.get(key).isEmpty()){stringIDMap.remove(key);continue;}//fewprintstatements...} 最佳答案 为了避免Concurrent

java - 哈希集。在大集合中表现缓慢

我遇到了一个我找不到解决方案的问题。我正在使用HashSet来存储值。我存储的值属于自定义类型Cycles,其中我已经覆盖了HashCode和equals如下,以确保缓慢的性能不是由hascode或equal方法引起的此外,我已将哈希集的初始容量设置为10.000.000@OverridepublicinthashCode(){finalintprime=31;intresult=1;result=prime*result+(int)(cycleId^(cycleId>>>32));returnresult;}@Overridepublicbooleanequals(Objectobj