草庐IT

assert_equal

全部标签

java - 无法理解在 ConcurrentHashMap 中重写 equals 方法的优势

Java中的大多数map类都会覆盖AbstractMap并使用其实现的equals方法来检查:传递的对象是Map类型长度相同包含this中的所有条目if(o==this)returntrue;//checkthatpassedobjectisoftypeMapif(!(oinstanceofMap))returnfalse;Mapm=(Map)o;//checkthatpassedobjecthassamelengthif(m.size()!=size())returnfalse;//passedobjectcontainsalltheentriestry{Iterator>i=ent

java - 为什么 ArrayList 不覆盖 equals() 以获得更好的性能?

ArrayList从其父类AbstractList继承了equals实现,效果不是很好。它可以首先检查两个ArrayList的大小,然后如果这些大小不同则立即返回false。为什么ArrayList不这样做? 最佳答案 如thisanswer中所述,这没有完成,因为某些实现的size方法复杂度为O(n),因此这确实是一个退化。我同意让equals在所有列表实现中保持一致会影响具有O(1)大小复杂度的集合,但也许Java开发人员认为它更容易插入在需要时删除它比在不需要时删除它(您必须重新实现整个方法!)。例如,您可以轻松地添加此优化,

Java .equals() instanceof 子类?为什么不调用父类(super class) equals 而不是将其设为最终类?

它在Object的.equals(Object)javadoc中说明:Itissymmetric:foranynon-nullreferencevaluesxandy,x.equals(y)shouldreturntrueifandonlyify.equals(x)returnstrue.在示例代码中几乎所有地方我都看到重写的.equals(Object)方法,它使用instanceof作为第一个测试之一,例如这里:Whatissues/pitfallsmustbeconsideredwhenoverridingequalsandhashCode?publicclassPerson{p

java - 如何在 Eclipse 的工作区中查找对 equals() 的类型特定引用?

我有一个覆盖equals()的类,我想查看工作区中这个equals方法的使用位置。使用Eclipse,我通常使用Ctrl-Shift-g来查找工作区中的所有引用。不幸的是,对于equals(),它从任何类型中撤回我工作区中对equals的每一个引用,而不仅仅是我覆盖它的那个,而且不可能找出许多结果中的哪一个与我的搜索有关。我想做的事可行吗?编辑:澄清。我有一个A类,它覆盖了equals方法。我有一个B类(和其他类)使用A类但不扩展它。我想查找工作区中的哪些类使用A类的equals方法,而不管它们是否属于A类的层次结构(例如B类)。 最佳答案

java - 不区分大小写的 File.equals 在区分大小写的文件系统上

我有一个字符串形式的文件路径。在Java中,我需要确定该文件是否存在于文件系统中(并且我们的代码需要跨平台,因为它可以在Windows、Linux和OSX上运行)。问题是文件路径的大小写和文件本身可能不匹配,即使它们确实表示相同的文件(大概这是因为它们起源于Windows并且没有注意到差异)。例如,我有一个文件路径“ABC.txt”。文件系统中存在名为“abc.txt”的文件。以下代码将在Windows上返回true,但在Linux上返回false:newFile("ABC.txt").exists();确定文件是否存在的最佳方法是什么,如果存在则返回文件系统上文件的句柄?

java - 为 equals() 实现选择字段的最佳实践

在编写单元测试时,我经常遇到这样的情况,即测试中某些对象的equals()-在assertEquals中-的工作方式应该不同于它的工作方式在实际环境中。以一些接口(interface)ReportConfig为例。它有id和其他几个字段。从逻辑上讲,当它们的id匹配时,一个配置等于另一个配置。但是当涉及到测试一些特定的实现时,比如XmlReportConfig,显然我想匹配所有字段。一种解决方案是在测试中不使用equals,只是遍历对象属性或字段并比较它们,但这似乎不是一个好的解决方案。因此,除了这种特定类型的情况,我想从语义上而非技术上找出实现equals的最佳实践。

java - 如何覆盖 java 枚举中的(最终)equals 方法?

我在覆盖Enum中的equals方法以使其与其他类兼容时遇到问题。Enum实现了一个接口(interface),其想法是可以测试该接口(interface)的所有实现是否相等,无论它们的类型如何。例如:publicinterfaceGroup{publicPoint[]getCoordinates();}publicenumBasicGroupsimplementsGroup{a,b,c;//simplified,theyactuallyhaveconstructors//+fieldsandmethods}publicclassOtherGroupimplementsGroup{//

java - equals(...) 和 equalsIgnoreCase(...)

当equals()可以用提供equalsIgnoreCase()功能的特殊ignoreCase参数? 最佳答案 equals()方法继承自Object,因此不应更改其签名。equals()通常可以在不知道对象的具体类的情况下使用,例如遍历对象集合时(尤其是在Java5泛型之前)。因此,如果不先将对象向下转换为String,您甚至看不到其他equals()。这是Java的创建者的设计选择,目的是使使用equals()的惯用法对所有对象都可以完全相同的方式使用。此外,海事组织if(string1.equalsIgnoreCase(str

java - Apache Commons ObjectUtils equals 方法测试什么样的相等性?

我一直理解Java中有两种类型的相等性,值相等:使用.equals()方法来测试两个对象是否在非空对象引用上实现了等价关系。引用相等:使用==运算符来测试两个原始类型或内存位置是否相等。以下页面更详细地描述了这些语言基础知识。维基百科Java编程:JavaProgramming/ComparingObjectsxyzwsJavaEE常见问题解答:Whatarethedifferencesbetweentheequalityoperatorandtheequalsmethod?Java平台API:JavadocforObject.equals()Java语言规范:EqualityOper

Java - 基类和子类中的 equals 方法

我有一个简单的基类,后来由许多单独的类扩展,这些类可能会引入新的字段,但不一定。我在基类中定义了一个equals方法,但也为一些子类覆盖了它。可以在基类/子类中混合定义吗?在我的例子中,这是为了避免检查相同字段的代码重复。 最佳答案 看看"Implementingequals()ToAllowMixed-TypeComparison"来自AngelikaLanger。以下是一些问题的简要说明和可能的解决方案:平等契约说(除其他外):Itissymmetric:foranynon-nullreferencevaluesxandy,x.