问题标签 [compareto]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 当参数字符串为空时,int compareTo() 应该返回什么?
据说当输入参数为null时,compareTo()应该抛出NullPointerException。但是,我正在实现一个需要将字段与字符串类型进行比较的类。这些字段不必是强制性的。我想知道在这种情况下,
1)当输入为空时我应该返回什么?任何非空字符串在字典上是否应该大于或小于空?
和
2)如果这被认为是不好的做法,是否有任何支持论据?我应该强制用户使用空字符串吗?如果使用空字符串,会不会混淆字段不适用和字段为空的情况?如果必须抛出异常,那么除了在手册中警告用户之外,我还能/应该做什么?
编辑:我可能在这里表达得不够清楚,但是在我正在实现的程序中,可能为空的字符串都是字段或类,不应为空。换句话说,comparedTo() 使用的对象不能为空,只有它们的私有字段可以。所以在这种情况下,我相信如果我正确地实现 compareTo(),它不会违反传递性要求,因为具有空字段的类总是被认为是相同的。我是对的还是我解释错了?
谢谢大家的回答!
java - 用一个参数在java中创建compareTo方法
我有一个关于compareTo
在 Java 中创建函数的问题。
在Java中,我们有String.compareTo(String)
方法。
但是,我需要制作一个compareTo
只有参数的函数,例如:compareTo(String)
。
我假设我需要用它来保存另一个字符串。
例如:
这是正确的想法吗?
我是否需要创建 get 和 set 函数来保存第一个单词以与第二个单词进行比较?
谢谢
java - PriorityQueues 中的 compareTo 和 equals
我对所有“如果 c 对 S 施加的排序与 equals 不一致,排序集(或排序映射)将表现得很奇怪”有点困惑。Javadoc 中的警告。我什至不确定 PriorityQueue 是我需要的...
我的情况是这样的:我有一个带有整数时间戳和其他一些字段的类 Event。我正在寻找一种数据结构,我可以在其中插入这些事件并按时间戳对事件进行排序。不同的事件可以有相同的时间戳,所以——如果我理解正确的话—— compareTo 和 equals 会不一致。
我的第一种方法是让 Event 实现 Comparable 并像这样提供 compareTo: public int compareTo(Event e) { return this.timestamp - e.getTimestamp(); }
我不明白我应该如何解决这个问题。我考虑过创建一个自定义比较器,但是在比较器的 javadoc 中也会弹出关于奇怪行为的相同警告。我不想插入多个相等的事件实例,我只想让它们按时间戳排序。
在此先感谢您的帮助 :)
编辑:
我只希望事件按时间戳排序。很可能,两个不同的事件具有相同的时间戳。所以 compareTo 将返回 0,因为它们具有相同的时间戳并且在排序时是相等的。但是 equals() 不会返回 true,因为它们是不同的事件。
我不确定,PriorityQueue 是否适合使用。我查看了 SortedSet,但它对 compareTo 和 equals 的一致性有相同的警告。
也许我从错误的角度解决这个问题,我不知道......
.net - 为什么要以这种方式实现 CompareTo?
考虑以下代码:
我的问题是,Int16 上的 CompareTo 方法返回 -1、0 和 1 以外的值是否有任何具体原因?
ILSpy 显示它是以这种方式实现的
而该方法以这种方式在 Int32 上实现
java - Java Comparable,multiple/不同的 compareTo() 方法实现
我有这堂课:
如果设置了标志,我想compareTo()
使用不同的类属性进行行为或排序。
因此,如果flag == 1
我想compareTo()
使用 property c
,否则就是flag == 0
方法中当前的任何内容。
换句话说,以不同的方式对同一类进行排序。
我不确定如何实现这一目标。请帮忙。
另外,如果我需要更多信息,请告诉我。
java - BigDecimal equals() 与 compareTo()
考虑简单的测试类:
您可以(有意识地)说x
等于y
(不是对象引用),但是当您运行程序时,会显示以下结果:
compareTo()
问题:和equals()
之间BigDecimal
有什么区别compareTo
可以确定x
等于y
?
PS:我看到 BigDecimal 有一个inflate()
方法上的equals()
方法。实际上做什么inflate()
?
java - 私有实例变量可通过 compareTo 内的“公共”范围访问
奇怪的是,实例变量brand
是私有范围,但可以通过 method 内部的“公共”方式访问compareTo
。
java - 如何插入 Long/String compareTo()?
我有一个实现存储 Comparable 对象的数据结构的类。一些实例包含 Long 和其他字符串。
我想统计发生的比较次数,而无需过多地更改数据结构类或应用程序。
一个自然的想法是实现一个新类(比如 MyLong),它的 compareTo() 增加一些统计计数器,然后调用真正的 compareTo()。然后将应用程序更改为存储 MyLongs 而不是 Longs 等。这不起作用,因为我不能从 Long 或 String 继承。
可以使这种方法起作用吗?有没有其他方法可以实现这个目标?
java - 未记录的 String.compareTo(null) NPE?
以下小测试会引发 NPE:
然而,compareTo()的 Javadoc没有提到参数不能是null
. 这很奇怪,因为 Javadocs 通常会提到参数不能是null
.
这只是文档中的一个小故障,还是我缺少更根本的原因/扭曲?
java - 如果 compareTo() 返回 0,为什么暗示对象相等?
让我们上课吧Person
。人有名字和身高。
Equals 和 hashCode() 仅考虑名称。Person 是可比较的(或者我们为它实现了比较器,不管是哪一个)。人是按身高来比较的。
期望两个不同的人可以具有相同高度的情况似乎是合理的,但是例如。TreeSet 的行为类似于 comapareTo()==0 意味着等于,而不仅仅是相同的大小。
为了避免这种情况,如果大小相同,比较可以第二次查看其他内容,但不能用于检测相同大小的不同对象。
例子:
结果:
你知道为什么会这样吗?