【发布时间】:2020-03-26 02:11:44
【问题描述】:
我有一个关于 compareTo 函数如何协助比较器进行排序的问题 即 o1.compareTo(o2) 与 o2.compareTo(o1)
如果两个字符串相等,则此方法返回 0,否则返回正值或负值。如果第一个字符串在字典顺序上大于第二个字符串,则结果为正,否则结果为负。
上面的语句很简单,但是 o1.compareTo(o2) 怎么会给我一个升序,而 o2.compareTo(o1) 给我一个降序呢?
如果我有整数值 '5,10,3',我会得到 3,5,10 和 o1.compareTo(o2),而后者则相反
String str1 = "Negan";
String str2 = ""; //empty string
//it would return the length of str1 in positive number
str1.compareTo(str2); // 5
//it would return the length of str1 in negative number
str2.compareTo(str1); //-5
按照这个逻辑,使用上面的代码,对于 str1.compareTo(str2),我应该有一个升序,其中按字母顺序排列更大的数字在后面,但是如果 str1 以“”出现而 str2 是“Negan”会发生什么。当将 1 与 2 进行比较时,是否设置了某种规则 -> 意味着如果值为负,则将其放在开头,如果为正,则将其放在结尾?或者,如果 compareTo 是 str2.compareTo(str1),如果值为负,则将其置于末尾,如果为正,则将其置于开头,同时考虑参数 (str1,str2) 与(str2, str1) 其中各个 compareTo 订单将执行相同的操作,只是 str1.compareTo(str2) = str2.compareTo(str1)。
编辑:简单地说,如果参数是可互换的并且以二进制形式将执行相同的操作,则返回的值如何确定定位。
【问题讨论】:
标签: java comparator compareto