comparator的返回值

来源:1-1 平衡树和AVL

weixin_慕圣6334738

2022-03-03 05:27:36

bobo老师你好, leetcode937号问题是一个自定义comparator的问题, 但是关于这个comparator我还不是特别清楚它的机制是怎样的. https://img.mukewang.com/climg/621fe0b5096bb38814341126.jpg

它有一个回答是这样的, 这里把代码也粘贴一下

相关代码:

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 的语义,再去看这个逻辑,看是否能理解?


继续加油!:)

1
heixin_慕圣6334738
hp>万分感谢!!

h022-03-03
共1条回复

算法与数据结构

波波老师5年集大成之作,算法与数据结构系统学习,考试、面试、竞赛通用

2636 学习 · 1090 问题

查看课程