问题标签 [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.

0 投票
6 回答
25691 浏览

java - 当参数字符串为空时,int compareTo() 应该返回什么?

据说当输入参数为null时,compareTo()应该抛出NullPointerException。但是,我正在实现一个需要将字段与字符串类型进行比较的类。这些字段不必是强制性的。我想知道在这种情况下,

1)当输入为空时我应该返回什么?任何非空字符串在字典上是否应该大于或小于空?

2)如果这被认为是不好的做法,是否有任何支持论据?我应该强制用户使用空字符串吗?如果使用空字符串,会不会混淆字段不适用和字段为空的情况?如果必须抛出异常,那么除了在手册中警告用户之外,我还能/应该做什么?

编辑:我可能在这里表达得不够清楚,但是在我正在实现的程序中,可能为空的字符串都是字段或类,不应为空。换句话说,comparedTo() 使用的对象不能为空,只有它们的私有字段可以。所以在这种情况下,我相信如果我正确地实现 compareTo(),它不会违反传递性要求,因为具有空字段的类总是被认为是相同的。我是对的还是我解释错了?

谢谢大家的回答!

0 投票
3 回答
6789 浏览

java - 用一个参数在java中创建compareTo方法

我有一个关于compareTo在 Java 中创建函数的问题。

在Java中,我们有String.compareTo(String)方法。

但是,我需要制作一个compareTo只有参数的函数,例如:compareTo(String)

我假设我需要用它来保存另一个字符串。

例如:

这是正确的想法吗?

我是否需要创建 get 和 set 函数来保存第一个单词以与第二个单词进行比较?

谢谢

0 投票
3 回答
3621 浏览

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 的一致性有相同的警告。
也许我从错误的角度解决这个问题,我不知道......

0 投票
2 回答
170 浏览

.net - 为什么要以这种方式实现 CompareTo?

考虑以下代码:

我的问题是,Int16 上的 CompareTo 方法返回 -1、0 和 1 以外的值是否有任何具体原因?

ILSpy 显示它是以这种方式实现的

而该方法以这种方式在 Int32 上实现

0 投票
3 回答
4655 浏览

java - Java Comparable,multiple/不同的 compareTo() 方法实现

我有这堂课:

如果设置了标志,我想compareTo()使用不同的类属性进行行为或排序。

因此,如果flag == 1我想compareTo()使用 property c,否则就是flag == 0方法中当前的任何内容。

换句话说,以不同的方式对同一类进行排序。

我不确定如何实现这一目标。请帮忙。

另外,如果我需要更多信息,请告诉我。

0 投票
4 回答
139933 浏览

java - BigDecimal equals() 与 compareTo()

考虑简单的测试类:

您可以(有意识地)说x等于y(不是对象引用),但是当您运行程序时,会显示以下结果:

compareTo()问题:和equals()之间BigDecimal有什么区别compareTo可以确定x等于y

PS:我看到 BigDecimal 有一个inflate()方法上的equals()方法。实际上做什么inflate()

0 投票
3 回答
695 浏览

java - 私有实例变量可通过 compareTo 内的“公共”范围访问

奇怪的是,实例变量brand是私有范围,但可以通过 method 内部的“公共”方式访问compareTo

0 投票
3 回答
264 浏览

java - 如何插入 Long/String compareTo()?

我有一个实现存储 Comparable 对象的数据结构的类。一些实例包含 Long 和其他字符串。

我想统计发生的比较次数,而无需过多地更改数据结构类或应用程序。

一个自然的想法是实现一个新类(比如 MyLong),它的 compareTo() 增加一些统计计数器,然后调用真正的 compareTo()。然后将应用程序更改为存储 MyLongs 而不是 Longs 等。这不起作用,因为我不能从 Long 或 String 继承。

可以使这种方法起作用吗?有没有其他方法可以实现这个目标?

0 投票
1 回答
7725 浏览

java - 未记录的 String.compareTo(null) NPE?

以下小测试会引发 NPE:

然而,compareTo()的 Javadoc没有提到参数不能是null. 这很奇怪,因为 Javadocs 通常会提到参数不能是null.

这只是文档中的一个小故障,还是我缺少更根本的原因/扭曲?

0 投票
6 回答
16774 浏览

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

让我们上课吧Person。人有名字和身高。

Equals 和 hashCode() 仅考虑名称。Person 是可比较的(或者我们为它实现了比较器,不管是哪一个)。人是按身高来比较的。

期望两个不同的人可以具有相同高度的情况似乎是合理的,但是例如。TreeSet 的行为类似于 comapareTo()==0 意味着等于,而不仅仅是相同的大小。

为了避免这种情况,如果大小相同,比较可以第二次查看其他内容,但不能用于检测相同大小的不同对象。

例子:

结果:

你知道为什么会这样吗?