Tag: hashcode

使用注释生成equals / hashcode / toString

我相信我通过识别哪些字段应该是散列/相等测试的一部分来读取人们在编译期间(使用APT)生成equals / hashcode / toString方法的地方。 我在网上找不到那样的东西(我可能梦见过它?)…… 这可以这样做: public class Person { @Id @GeneratedValue private Integer id; @Identity private String firstName, lastName; @Identity private Date dateOfBirth; //… } 对于一个实体(所以我们想要排除一些字段,比如id)。 或者像scala案例类,即值对象: @ValueObject public class Color { private int red, green, blue; } 不仅文件变得更易读和更容易编写,而且它还有助于确保所有属性都是equals / hashcode的一部分(如果您稍后添加其他属性,而不相应地更新方法)。 我听说APT在IDE中得不到很好的支持,但我不认为这是一个主要问题。 毕竟,测试主要由持续集成服务器运行。 有没有想过这是否已经完成,如果不是为什么? 谢谢

如何在Objective-C中获得Java String.hashCode()的相同结果?

我一直在http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/lang/String.java上阅读有关String.hashCode()的文档。来自相同字符串的相同结果,但我没有得到任何令人满意的结果。 在Objective-C [NSString hash]中给出了完全不同的结果。 有没有人这样做过? 谢谢

HashMap优化的影响,它将与每个条目关联的哈希代码缓存到其get方法中

来自第46页“有效的Java”Joshua Bloch。 第9项:当你重写equals时,ALways会覆盖hashCode 某些类PhoneNumber会覆盖equals()并且不会覆盖hashCode() “涉及两个实例:一个用于插入HashMap,另一个用于(尝试)检索。” …“…即使两个实例碰巧哈希到同一个桶, get方法几乎肯定会返回null ,因为HashMap有一个优化缓存与每个条目关联的哈希代码,并且不需要检查如果哈希码不匹配,则对象相等。“ 问题是 – 如果“两个实例碰巧哈希到同一个桶”,为什么’get’将返回’null’? 什么是HashMap优化的角色(没有得到正确的实例)“兑现…”? 只是针对这种情况 – “这两个实例碰巧哈希到同一个桶” – 如果HashMap困扰“如果哈希码不匹配则对象相等”会怎么样?

使用HashMap计算实例

我有以下代码来计算数组中不同字符串的实例; String words[] = {“the”,”cat”,”in”,”the”,”hat”}; HashMap wordCounts = new HashMap(50,10); for(String w : words) { Integer i = wordCounts.get(w); if(i == null) wordCounts.put(w, 1); else wordCounts.put(w, i + 1); } 这是一种正确的做法吗? 一个简单的任务似乎有点啰嗦。 HashMap结果对我很有用,因为我将通过字符串对其进行索引。 我很担心这条线 else wordCounts.put(w, i + 1); 由于这个事实,可能会插入第二个key-value对 new Integer(i).equals(new Integer(i + 1)); 将是假的,所以两个Integers最终将在同一个String密钥桶下,对吧? 或者我只是过度思考自己陷入困境?

Apache Commons Lang3 Hashcode,Equals和ToString包括Enums

我们为服务响应和模型中的请求对象定义了很少的数据类型。 最近我们发现需要在所有这些类型上实现ToString,HashCode和Equals ,以便在比较和断言上使用它们。 从少数几个来源确认在Java中覆盖equals和hashCode时应该考虑哪些问题? , 正确的方法来实现等于合同等我们遵循使用org.apache.commons.lang3.builder.EqualsBuilder , HashCodeBuilder和ToStringBuilder实现toString,equals和hashcode,如下所示 – Response.java import org.apache.commons.lang3.builder.EqualsBuilder; import org.apache.commons.lang3.builder.HashCodeBuilder; import org.apache.commons.lang3.builder.ToStringBuilder; public class Response { private Integer value; private Currency currency; private Object edited; public Response() { } public Response(Integer value, Currency currency, Object edited) { this.value = value; this.currency = currency; this.edited = edited; } public Currency getCurrency() { […]

ArrayList – 添加“相同”对象(same => equals,hashCode),Threads

我有一个问题。 当我尝试将“相同”对象两次添加到ArrayList时会发生什么。 “相同”是指单个类的对象,使用equals()和hashCode()标识为相同。 它对于大多数成员变量具有不同的值,并且可能是从不同的线程创建的,但对于equals()和hashCode(),它们是“相同的”。 第二个对象是否会替换第一个对象? 另外,如果两个线程试图将这些对象完全同时添加到ArrayList会发生什么? 这有可能吗? 如果是,会发生什么? 谢谢! 🙂 [编辑]感谢所有的答案! 我应该使用synchronizedList,而不是使用“synchronize(list){}”吗? – >我读了docs,即使是使用synchronizedList,也应该使用迭代同步(list) [EDIT2] synchronizedList可以声明为成员变量吗? 我试过了,但它没有用。

覆盖java中的hashcode和equals方法?

我有以下课程: public class Sample implements java.io.Serializable{ //POJO with two fields and getters/setters private String name; private Integer id; //This POJO does not override equals() and hashCode() } public class B{ private Sample sample; //here i need override hashcode and equals() based on **sample** property. } 当我尝试在B类中重写equals()和hashCode()时,我在Eclipse中得到了以下错误。 字段类型com.mypackage.Sample未实现hashCode()和equals() – 生成的代码可能无法正常工作。 现在,我如何基于Sample属性比较两个B实例是否等于? 我无法修改Sample类。

如何实现与hibernate相等而不会失去对称属性的风险?

在阅读之后(再次,应该已经做了很久以前)正确实现了equals和hashcode我得出了这些结论,这对我有用: 如果在JDK 7之前 :首选使用Apache commons equalsbuilder和hashcodebuilder。 (或番石榴)。 他们的javadoc包含如何以良好的方式使用它们的示例。 如果是JDK 7 ++ :使用新的Objects实用程序类 但是,如果为hibernate写一些特殊的请求出现(参见更远的源代码)其中推荐使用instanceof而不是getClass ,因为hibernate创建了延迟加载的子类的代理。 但据我所知,如果这样做,另一个潜在的问题就出现了:使用getClass的原因是为了确保equals合约的对称属性。 JavaDoc中: *It is symmetric: for any non-null reference values x and y, x.equals(y) should return true if and only if y.equals(x) returns true.* 通过使用instanceof,它可能不是对称的。 示例:B扩展A. A的等于A的检查实例.B的等于B的实例检查。给A a和B b: a.equals(b) – > true b.equals(a) – > false 如何实现与hibernate相等而不会失去对称属性的风险? 使用getClass时我似乎不安全,使用instanceof时我不安全? 答案是永远不要将重要成员添加到子类,然后使用instanceof是安全的(对于hibernate)? 我读到的消息来源: […]

使用String hashCode()方法?

来自链接: http://www.tutorialspoint.com/java/java_string_hashcode.htm Java中hashCode与equals方法的关系 好hashCode()实现 但我无法理解哈希码。 这是一个例子: public class StringDemo { public static void main(String args[]){ String strob1=”first string”; System.out.println(strob1.hashCode()); } } 这个简单的程序给我输出: -5468287 谁能告诉我:它如何给我输出: -5468287 ?

一致的Equals()结果,但不一致的TreeMap.containsKey()结果

我有以下对象Node : private class Node implements Comparable(){ private String guid(); … public boolean equals(Node o){ return (this == o); } public int hashCode(){ return guid.hashCode(); } public int compareTo(Node o){ return (this.hashCode() – o.hashCode()); } … } 我在以下TreeMap使用它: TreeMap<Node, TreeSet> nodes = new TreeMap<Node, TreeSet>(); 现在,树图在名为Graph的类中使用,以存储当前在图中的节点,以及它们的一组边(来自类Edge )。 我的问题是当我尝试执行时: public containsNode(n){ for (Node x : nodes.keySet()) […]