草庐IT

HashCode

全部标签

java - 将具有相同值的数组添加到 HashSet 会导致重复项

我正在尝试创建一组整数数组,问题是如果我尝试这样做:HashSets=newHashSet();inta1[]={1,2,3};inta2[]={1,2,3};s.add(a1);s.add(a2)System.out.println(s.size());那么s有两个对象,但应该只有一个。注意:是不是HashSet也没关系。它就是行不通。现在,如果我尝试使用ArrayList执行此操作,则类似于:HashSet>s=newHashSet>();ArrayLista1=newArrayList();ArrayLista2=newArrayList();a1.add(1);a1.add(2

Java : Hashcode of a Class A containing a Class B which contains A

我在我的类中实现哈希码函数时遇到问题。正如标题中所解释的,我有两个类:类A代表学校考试,因此它包含多个属性(即主题、标记和代表参加考试的学生的类实例)。如您所料,类(class)B代表学生。它有一些属性(即姓名、地址、年龄等)和一个包含多个A类实例的ArrayList(学生可以参加很多考试)。我的问题来了,我被要求在两个类中实现哈希码函数。我使用的哈希码是我学过的哈希码,它是将每个属性的哈希码相加,乘以一个整数,具体取决于它的类型(即字符串乘以31,整数乘以17,对象乘以13,等等)。但是如果我调用A类的hashcode,那么调用B类的hashcode,然后又回调A类的hashcode

java - 在子类中调用 super.equals 和 super.hashCode?

如果我实现equals()和hashCode()在父类和子类中,是否有必要调用super.equals()在equals()在子类中,例如publicbooleanequals(Objectobj){if(obj.getClass()!=ChildClass.class){returnfalse;}returnsuper.equals()&&this.var==((ChildClass)obj).var;}我假设父类不是Object并且给出了equals和hashCode的正确定义。 最佳答案 不,这不是必需的,而且可能是错误的。事

java - 为什么 Sun 指定 String.hashCode() 实现?

关于依赖String.hashCode()的当前实现是否安全似乎一直存在争论,因为从技术上讲,它由规范(Javadoc)保证。为什么Sun在规范中指定String.hashCode()的实现?为什么开发人员需要依赖hashCode()的特定实现?Sun为何如此害怕如果将来更改String.hashCode()天会塌下来?(这可能是由#2解释的) 最佳答案 依赖hashCode()的特定实现的一个原因是它是否曾经持久化到数据库、文件或任何其他存储介质中。BadThings(tm)如果在散列算法发生变化时读回数据,就会发生这种情况。您可

java - 为什么 Object.hashCode() 在运行中返回相同的值

hashCode()的默认实现在HotSpot上返回randomvalue并将其存储在对象头中。这在Java8中似乎没有改变。其中哈希值是通过调用os::random()计算得出的:staticinlineintptr_tget_next_hash(Thread*Self,oopobj){intptr_tvalue=0;if(hashCode==0){//ThisformusesanunguardedglobalPark-MillerRNG,//soit'spossiblefortwothreadstoraceandgeneratethesameRNG.//OnMPsystemwe'l

java - 哈希码和等于

equals和hashCode方法必须一致,也就是说当两个对象根据equals方法相等时他们的hashCode方法应该返回相同的哈希值。如果我们不重写hashCode()方法,Java将返回一个唯一的哈希码。classHashValue{intx;publicbooleanequals(Objectoo){//if(ooinstanceofHashvalue)uncommentingthsgiveserror.dunnowhy?//:|HashValuehh=(HashValue)oo;if(this.x==hh.x)returntrue;elsereturnfalse;}HashVa

java - 插入键时自定义等于/哈希( Guava 缓存)

简单地说,我必须重写缓存选择正确键的方式,因为在检索键时不应考虑某些字段(例如,时间戳、消息ID等)。我无法修改key对象的实际哈希函数,因为它已经在我的代码中用于识别。Guava缓存有可能吗?并有解决方法?这是我的配置:CacheBuilder.newBuilder().maximumSize(CACHE_SIZE).recordStats().expireAfterWrite(DEFAULT_AGE,TimeUnit.DAYS).build(newCacheLoader(){@OverridepublicResponseload(Requestrequest){returnrequ

java - 哈希表哈希避免负哈希码

我想知道为什么Hashtable避免使用负哈希码?inthash=key.hashCode();intindex=(hash&0x7FFFFFFF)%tab.length;(hash&0x7FFFFFFF)使带符号的位从0到正,但为什么我们不能将带符号的32位整数视为无符号?甚至使用模块化技巧使其变得积极。例如,publicstaticlongint_mod(inthashcode,inttab_length){return(hashcode%tab_length+tab_length)%tab_length;} 最佳答案 该值必须

java - 为什么 Object.equals() 的实现没有使用 hashCode()?

或“为什么Sun/Oracle的人每次都强制我们覆盖equals()和hashCode()?”Everyoneknows也就是说,如果您重写一个对象的equals()或hashCode(),您也必须重写另一个对象,因为这两者之间存在契约:NotethatitisgenerallynecessarytooverridethehashCodemethodwheneverthismethod[i.e.equals()]isoverridden,soastomaintainthegeneralcontractforthehashCodemethod,whichstatesthatequalob

java - java 的 hashCode() 是确定性的吗?

这个问题在这里已经有了答案:Java,Object.hashCode()resultconstantacrossallJVMs/Systems?(6个答案)关闭9年前。java的hashCode()是确定性的吗?我尝试实现一个使用minhashing算法的文档搜索引擎,我使用hashCode来预哈希单词。同一个词每次运行时都会得到相同的哈希值吗?即使我从不同的机器(32位与64位)运行它是否会得到相同的哈希值?