lambda表达式在oj中会比匿名内部类慢

本文分享了在LeetCode上解决日志文件重排序问题的优化过程,对比了不同编程方法的效率,提出了在在线评测环境中lambda表达式可能比匿名内部类慢的观点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

引言

今天在刷题的时候遇到了这道题https://leetcode-cn.com/problems/reorder-log-files
。一开始的解法为:

class Solution {
    /**
     * 0 <= logs.length <= 100 | 3 <= logs[i].length <= 100 | logs[i] 保证有一个标识符,并且标识符后面有一个字。
     * 字母日志 排前面 数字排后面且按原本顺序| 字母日志 字典序 数字原样 忽略标识符
     */
    public static String[] reorderLogFiles(String[] logs) {
        if(logs.length < 2) {
            return logs;
        }

        List<String> resList = new LinkedList<>();
        List<String> strList = new LinkedList<>();
        for (String str : logs) {
            String[] strings = str.split(" ");
            char c = strings[1].charAt(0);
            if ('0' <= c && c <= '9') {
                resList.add(str);
            }else {
                strList.add(str);
            }
        }

        strList.sort(Comparator.comparing(s -> s.split(" ", 2)[1]));
        int index = 0;
        for (String str : strList){
            resList.add(index++,str);
        }
        return resList.toArray(new String[resList.size()]);

    }
}

发现用时比其他人慢很多,然后开始优化。

具体看注释部分和存在部分。

class Solution {
    /**
     * 0 <= logs.length <= 100 | 3 <= logs[i].length <= 100 | logs[i] 保证有一个标识符,并且标识符后面有一个字。
     * 字母日志 排前面 数字排后面且按原本顺序| 字母日志 字典序 数字原样 忽略标识符
     */
    public static String[] reorderLogFiles(String[] logs) {
        if(logs.length < 2) {
            return logs;
        }

        List<String> resList = new LinkedList<>();
        List<String> strList = new LinkedList<>();
        for (String str : logs) {
            // String[] strings = str.split(" ");
            // char c = strings[1].charAt(0);
            char c = str.charAt(str.indexOf(" ")+1);
            
            if ('0' <= c && c <= '9') {
                resList.add(str);
            }else {
                strList.add(str);
            }
        }

        // strList.sort(Comparator.comparing(s -> s.split(" ", 2)[1]));
        strList.sort(new Comparator<String>(){
            public int compare(String s1, String s2){
                String log1 = s1.substring(s1.indexOf(" "));
                String log2 = s2.substring(s2.indexOf(" "));
                return log1.compareTo(log2);
            }
        });
        // int index = 0;
        // for (String str : strList){
        //     resList.add(index++,str);
        // }
        strList.addAll(resList);
        return strList.toArray(new String[strList.size()]);

    }
}

sort那里是最后一次进行的优化。优化之后速度猛的提高了…
想想也是,你函数式编程,它还要再解释解释。
所以我大胆提高一个观点:lambda表达式在oj中会比匿名内部类慢。

图片(论证)

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值