Tag: equals

使用注释生成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中得不到很好的支持,但我不认为这是一个主要问题。 毕竟,测试主要由持续集成服务器运行。 有没有想过这是否已经完成,如果不是为什么? 谢谢

用布尔值比较两个字符串?

我正在尝试这段代码写作练习,我迷失了! 练习是: 完成将两个字符串和一个布尔值作为输入的方法。 如果布尔值为true,则此方法比较前两个字符串,忽略大小写(大写/小写)。 如果它们具有相同的长度,则两个字符串被认为是相等的忽略大小写,并且两个字符串中的相应字符等于忽略大小写。 如果boolean为false,则此方法应比较两个字符串,如果第一个String表示与第二个String相同的字符序列,则返回true,否则返回false。 注意: compareTwoStrings(“HELLO”, “”, false)应该返回false。 这是我的尝试: public boolean compareTwoStrings (String a, String b, boolean isIgnoreCase) { if (a.equalsIgnoreCase(b)) { return (isIgnoreCase==true); } else if (a.equals(b)) { return (isIgnoreCase==false); } } 它甚至没有编译,但即使它确实如此,我相信它不会工作。

覆盖equals方法

这里有新手问题: 所以在我的大学作业中,我必须为我创建的新类重写对象类equals方法。 新类是“Product”,每个产品都有一个唯一的“id”属性。 所以这就是我覆盖它的方式: @Override public boolean equals(Object obj) { final Product other = (Product) obj; if (id != other.id) return false; return true; } 事情是这样做是10分中的1.5分,让我怀疑是那么容易。 所以我开始搜索,我找到了类似的东西: @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; final Product other = […]

HashSet存储相等的对象

下面是从对象列表中查找重复对象的代码。 但由于某种原因,hashset甚至存储了相等的对象。 我当然错过了一些东西,但当我检查hashset的大小时,它出来了5。 import java.util.ArrayList; import java.util.HashSet; public class DuplicateTest { public static void main(String args[]){ ArrayList dogList = new ArrayList(); ArrayList duplicatesList = new ArrayList(); HashSet uniqueSet = new HashSet(); Dog a = new Dog(); Dog b = new Dog(); Dog c = new Dog(); Dog d = new Dog(); Dog e = new […]

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

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

equals()方法如何在Java中工作

equals方法比较两个对象值是否相等。 我的问题是如何比较这两个对象? 怎么能告诉两个对象是否相等? 我想知道它基于它比较两个对象。 我不包括hashCode方法。

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类。

hashcode()和equals()方法

所以我对hashcode()和equals()方法有疑问 假设我只是写了一个非常基本的程序来覆盖这两个方法 import java.util.*; class Employee { private String name; private int empid; public Employee(String name,int empid) { this.name=name; this.empid=empid; } public int getEmpid() { return empid; } public String getName() { return name; } public boolean equals(Object obj) { System.out.println(“equals has just been called…”); Employee e1=(Employee)obj; return ((name.equals(e1.name)) && (empid==e1.empid)); } public int hashCode() […]