草庐IT

HashCode

全部标签

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 - 如何为循环图节点编写 hashCode() 函数?

我有以下类用作图形的一部分:publicclassMyNode{privateStringname;privateSetparents;privateSetchildren;//gettersandsetters}当我使用Eclipse的Source/GeneratehashCode()andequals()时,它会生成这个方法:@OverridepublicinthashCode(){finalintprime=31;intresult=1;result=prime*result+((children==null)?0:children.hashCode());result=prim

java - hibernate如何使用equals()和hashCode()?

如果您从数据库加载一个实体并以某种方式修改它,hibernate会使用equals/hashCode将实体的当前状态与其快照进行比较以确定是否需要执行sql更新吗?如果它做了这样的比较,我有另一个问题:如果equals将返回true,hibernate会认为实体没有改变或尝试使用它的默认比较(可以肯定)吗? 最佳答案 请参阅EqualsandHashCode来自JBoss社区网站。从那里:Toavoidthisproblemwerecommendusingthe"semi"-uniqueattributesofyourpersist

Java 为两个可互换的整数覆盖 equals() 和 hashcode()

我正在覆盖两个整数的简单容器对象的equals和hashcode方法。每个int都反射(reflect)了另一个对象的索引(该对象是什么并不重要)。类的要点是表示两个对象之间的连接。连接的方向无关紧要,因此equals方法应该返回true,而不管两个int在对象中的方向如何,例如connectionA=newConnection(1,2);connectionB=newConnection(1,3);connectionC=newConnection(2,1);connectionA.equals(connectionB);//returnsfalseconnectionA.equal

java - boolean 字段上的哈希码实现

如果有两个boolean字段,我如何实现一个好的哈希码?通常人们只是将整数值添加到他们的哈希码值中。但是,如果我只是简单地将1或0添加到我的哈希码中,我认为这并不好。因为如果我有两个A类对象:obj1.b=true,obj1.c=false。obj2.b=假,obj2.c=真。其他都是一样的。那么这两个不相等对象的哈希码是相同的。我知道这种情况没问题。但是想象一下,如果有100个boolean字段,那么碰撞会太多吗?我不希望这么多不同的对象落在同一个桶里。我在下面所做的是将不同的数字分配给每个字段的不同真值,因此对象哈希码可以非常不同。publicclassA{privatefinal

java - 尽管同时实现了 hashCode() 和 equals(),但 HashSet 添加了重复条目

我有以下类(class):classPoint{doublex,y;//....constructorandotherfunctionsherepublicbooleanequals(Pointp){if(p==null)return(false);return(x==p.x&&y==p.y);}publicinthashCode(){intresult=17;longc1=Double.doubleToLongBits(x);longc2=Double.doubleToLongBits(y);intci1=(int)(c1^(c1>>>32));intci2=(int)(c2^(c2

java - 从多个 Java 字符串对象创建散列

什么是实现像这样的方法最快和更健壮(就唯一性而言)的方法publicabstractStringhash(String[]values);values[]数组有100到1,000个成员,每个成员只有几十个字符,并且该方法需要在不同的values[上运行大约10,000次/秒]数组每次。应该使用StringBuilder缓冲区构建长字符串,然后对缓冲区内容调用哈希方法,还是继续为values[中的每个字符串调用哈希方法更好?]?显然需要至少64位的散列(例如MD5)来避免冲突,但是有没有更简单、更快的方法可以以相同的质量完成?比如,怎么样publicStringhash(String[]

java - 使用 Mojo Jaxb2 maven 插件创建 Java 类时生成 hashCode() 和 equals()

我正在处理的代码使用org.codehaus.mojo中的jaxb2-maven-plugin从XSD模式生成Java类。我正在寻找一种方法来为这些类自动实现equals()和hashCode()方法,但似乎没有办法。我知道还有其他JAXB2Maven插件可以做到这一点(例如http://confluence.highsource.org/display/J2B/Home),但我想知道你们之前是否遇到过这个问题,是否有办法修复它。我正在使用xjc目标生成类。 最佳答案 你提到的JAXB2Basics不是maven-jaxb2-plu

java - 为非常简单的类实现 `hashCode()`

我有一个非常简单的类,只有一个字段成员(例如字符串)。是否可以实现hashCode()以简单地返回fieldMember.hashCode()?或者我应该以某种方式操纵该字段的哈希码吗?另外,如果我应该操纵它,那是为什么? 最佳答案 如果fieldMember是唯一标识对象的非常好的方法,我会说是。 关于java-为非常简单的类实现`hashCode()`,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.co

java - 如何在 Java 中生成共享相同哈希码的字符串?

现有的用Java编写的系统使用字符串的哈希码作为其负载平衡的路由策略。现在,我无法修改系统,但需要生成共享相同哈希码的字符串来测试最坏情况。我从命令行提供这些字符串,并希望系统将所有这些字符串路由到同一目的地。是否可以生成大量共享相同哈希码的字符串?为了弄清楚这个问题:String[]getStringsInSameHashCode(intnumber){//returnanarrayinlength"number"//Everyelementofthearraysharethesamehashcode.//Theelementshouldbedifferentfromeachothe