草庐IT

java - Guava 与 Apache Commons Hash/Equals 构建器的对比

我想知道Guava与ApacheCommons在equals和hashCode构建器方面的主要区别是什么。等于:Apache公地:publicbooleanequals(Objectobj){if(obj==null){returnfalse;}if(obj==this){returntrue;}if(obj.getClass()!=getClass()){returnfalse;}MyClassother=(MyClass)obj;returnnewEqualsBuilder().appendSuper(super.equals(obj)).append(field1,other.f

java - 我们应该总是重写 equals 吗?

自己写类的时候,是否总是需要重写equals(Objecto)?如果我不这样做,它会自动检查所有字段是否相同吗?或者它只是检查两个变量是否指向同一个对象? 最佳答案 如果一个人正在编写一个要以某种方式比较其对象的类,那么应该覆盖equals和hashCode方法。不提供显式的equals方法将导致从父类(superclass)继承equals方法的行为,并且在父类(superclass)是Object的情况下类,则它将是Object的JavaAPI规范中规定的行为。类。可以在Object的文档中找到提供equals方法的一般契约。类

java - HashSet 包含重复条目

当equals方法表明它们相同时,HashSet仅存储值ones。我就是这么想的。但现在我将元素添加到HashSet,其中equals方法返回true并且集合的大小仍在增长?对不起,我很困惑。在我错的地方给出一些提示会很好。Elementt1=newElement(false,false,false,false);Elementt2=newElement(true,true,true,true);Elementt3=newElement(false,false,false,false);if(t1.equals(t3))System.out.println("they'reequal"

java - 什么时候需要覆盖 equals 和 hashcode 方法?

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:OverridingequalsandhashCodeinJava如果我有classA{intx=1;}...Aa1=newA();Aa2=newA();a1.equals(a2);如果我比较A的2个实例而不覆盖equals方法,我会得到预期的结果吗?

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 - Type 类型层次类型应该如何实现?

当泛型被添加到1.5时,java.lang.reflect添加了一个Type与各种子类型接口(interface)以表示类型。Classretrofit以实现Type对于pre-1.5类型。Type子类型可用于1.5的新泛型类型。这一切都很好。有点尴尬Type必须沮丧才能做任何有用的事情,但可以通过试验、错误、摆弄和(自动)测试来实现。除非涉及到实现......应该怎样equals和hashCode予以实现。ParameterizedType的API描述Type的子类型说:Instancesofclassesthatimplementthisinterfacemustimplement

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();确定文件是否存在的最佳方法是什么,如果存在则返回文件系统上文件的句柄?