草庐IT

CompareTo

全部标签

java - 自动检查equals、hashCode和compareTo一致性的技术?

我很清楚契约(Contract)需要确保hashCode与equals一致,并且equals与一致>比较。但是,这是oftenviolatedinpractice.是否有任何工具、技术或库可以自动测试这种一致性?不幸的是,我怀疑答案是否定的,但如果能够对这种可以利用库调用或框架的东西进行单元测试而不需要编写自定义测试,那将很有用在重要的情况下手动处理。如果不清楚我所说的一致性是什么意思,对于hashCode和equals我指的是以下内容:Iftwoobjectsareequalaccordingtotheequals(Object)method,thencallingthehashCo

java - 如果 compareTo() 返回 0,为什么暗示对象相等?

让我们有一个类Person。人有名字和高度。Equals和hashCode()只考虑名称。Person是可比较的(或者我们为它实现了比较器,不管是哪一个)。人员按高度进行比较。期望两个不同的人可以具有相同的高度似乎是合理的,但是例如TreeSet的行为类似于compareTo()==0表示相等,而不仅仅是大小相同。为避免这种情况,如果大小相同,比较可以第二次查看其他内容,但不能用于检测相同大小的不同对象。例子:importjava.util.Comparator;importjava.util.HashSet;importjava.util.Objects;importjava.uti

java - 为什么定义协变 compareTo 方法被认为是不好的做法?

这是我的代码中的一个示例:基类:abstractclassAbstractBaseimplementsComparable{privateinta;privateintb;publicintcompareTo(AbstractBaseother){//compareusingaandb}}实现:classImplextendsAbstractBase{privateintc;publicintcompareTo(Implother){//compareusinga,bandcwithchavinghigherimpactthanbinAbstractBase}FindBugs将此报告为

Java "unchecked call to compareTo(T) as a member of the raw type java.lang.Comparable"

我正在尝试将排序列表作为Java中的一个简单练习来实现。为了使其通用,我有一个add(Comparableobj)所以我可以将它与任何实现Comparable接口(interface)的类一起使用。但是,当我在代码中的任何位置使用obj.compareTo(...)时,我得到"uncheckedcalltocompareTo(T)作为原始类型java.lang的成员.Comparable"来自编译器(带有-Xlint:unchecked选项)。代码工作得很好,但我不知道如何摆脱那个烦人的消息。有什么提示吗? 最佳答案 本质上,此警告

java - 如何在 Java 中的字符串上使用 Comparable CompareTo

我可以使用它来按empid排序,但我不确定是否可以比较字符串。我收到一个错误,该运算符未定义字符串。publicintcompareTo(Empi){if(this.getName()==((Emp)i).getName())return0;elseif((this.getName())>((Emp)i).getName())return1;elsereturn-1; 最佳答案 你需要用到的是Strings的compareTo()方法。returnthis.getName().compareTo(i.getName());这应该可以

java - 如何编写比较对象的 compareTo 方法?

我正在学习数组,基本上我有一个收集姓氏、名字和分数的数组。我需要写一个compareTo方法将比较姓氏和名字,以便列表可以从姓氏开始按字母顺序排序,然后如果两个人的姓氏相同,那么它将对名字进行排序。我很困惑,因为我书中的所有信息都是比较数字,而不是对象和字符串。这是我迄今为止编写的代码。我知道这是错误的,但它至少解释了我认为我在做什么:publicintcompare(Objectobj)//creatingamethodtocompare{Students=(Student)obj;//creatingastudentobject//IguesshereI'mtellingittoc

Java 获取 String CompareTo 作为比较器对象

我想通过String.CompareTo比较器对静态字符串数组进行排序和二进制搜索。问题是排序和二分查找都需要传入一个Comparator对象——那么我该如何传入内置的字符串比较器呢? 最佳答案 您可以编写自己的比较器publicclassExampleComparatorimplementsComparator{publicintcompare(Stringobj1,Stringobj2){if(obj1==obj2){return0;}if(obj1==null){return-1;}if(obj2==null){return1

java - compareTo 与原语 -> 整数/整数

这样写比较好intprimitive1=3,primitive2=4;Integera=newInteger(primitive1);Integerb=newInteger(primitive2);intcompare=a.compareTo(b);或intprimitive1=3,primitive2=4;intcompare=(primitive1>primitive2)?1:0;if(compare==0){compare=(primitive1==primitive2)?0:-1;}我认为第二个更好,应该更快,内存优化更多。但他们不是平等的吗? 最佳

Java Integer compareTo() - 为什么使用比较与减法?

我发现compareTo方法的java.lang.Integer实现如下所示:publicintcompareTo(IntegeranotherInteger){intthisVal=this.value;intanotherVal=anotherInteger.value;return(thisVal问题是为什么要使用比较而不是减法:returnthisVal-anotherVal; 最佳答案 这是由于整数溢出。当thisVal非常大且anotherVal为负数时,从前者中减去后者会产生大于thisVal的结果,该结果可能会溢出到

java - Java中的字符串比较

“按字典顺序比较两个字符串”是什么意思? 最佳答案 根据@Bozho和@aioobe的答案,字典比较类似于人们可能在字典中找到的顺序。JavaString类提供了.compareTo()方法以按字典顺序比较字符串。像这样使用"apple".compareTo("banana").这个方法的返回是一个int,可以解释如下:返回返回==0则这两个字符串在字典上是等价的返回>0,则传递给compareTo方法的参数按字典顺序排列。更具体地说,该方法提供了ASCII值的第一个非零差异。因此"computer".compareTo("comp