comparator的返回值
来源:1-1 平衡树和AVL
weixin_慕圣6334738
2022-03-03 05:27:36
bobo老师你好, leetcode937号问题是一个自定义comparator的问题, 但是关于这个comparator我还不是特别清楚它的机制是怎样的. 
它有一个回答是这样的, 这里把代码也粘贴一下
相关代码:
class Solution {
public String[] reorderLogFiles(String[] logs) {
Comparator<String> myComp = new Comparator<String>() {
@Override
public int compare(String log1, String log2) {
String[] split1 = log1.split(" ", 2);
String[] split2 = log2.split(" ", 2);
boolean isDigit1 = Character.isDigit(split1[1].charAt(0));
boolean isDigit2 = Character.isDigit(split2[1].charAt(0));
if(!isDigit1 && !isDigit2) {
int cmp = split1[1].compareTo(split2[1]);
if(cmp != 0)
return cmp;
return split1[0].compareTo(split2[0]);
}
if(!isDigit1 && isDigit2)
return -1;
else if(isDigit1 && !isDigit2)
return 1;
else
return 0;
}
};
Arrays.sort(logs, myComp);
return logs;
}
}我的问题是这个地方: 我要怎么理解这个返回1,-1还是0, 我返回-1就代表升序吗?
相关代码:
if(!isDigit1 && isDigit2) return -1; else if(isDigit1 && !isDigit2) return 1; else return 0;
1回答
liuyubobobo
2022-03-03
int compare(Object o1, Object o2) 的语义是:
如果 o1 应该排在 o2 的前面,则返回负数;
如果 o1 应该排在 o2 的后面,则返回正数;
如果 o1 和 o2 没有先后之分(相等),则返回 0。
请你根据这个 compare 的语义,再去看这个逻辑,看是否能理解?
继续加油!:)
相似问题