lambda表示式在oj中會比匿名內部類慢
引言
今天在刷題的時候遇到了這道題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中會比匿名內部類慢。
圖片(論證)
相關文章
- Java 的各種內部類、Lambda表示式Java
- 初識Lambda表示式(匿名函式)函式
- 匿名內部類
- 委託、匿名方法到lambda表示式
- Python函式與lambda 表示式(匿名函式)Python函式
- Lambda對比匿名內部類,Lambda是什麼,Lambda該怎麼用,Lambda使用過程中有什麼需要注意的?
- Java內部類詳解--匿名內部類Java
- 匿名內部類理解
- Java中的匿名內部類及內部類的二三事Java
- Java類與匿名內部類Java
- java內部類,區域性內部類,靜態內部類,匿名內部類Java
- 匿名內部類中關於new Runnable ( )
- 匿名內部類的使用
- 10-Java內部類——成員內部類、區域性內部類、匿名內部類Java
- java培訓教程:什麼是匿名內部類?怎樣建立匿名內部類?Java
- 內部類是什麼?匿名內部類又是什麼?
- C# Lambda表示式和linq表示式 之 匿名物件查詢接收C#物件
- java匿名內部類:“ 儂好,世界”Java
- Java 中的 Lambda 表示式Java
- 必知必會之Lambda表示式
- lambda 表示式
- lambda表示式
- 【碼上開學】Kotlin 的高階函式、匿名函式和 Lambda 表示式Kotlin函式
- 在Android Studio中使用Lambda表示式Android
- Python中lambda表示式的用法Python
- Java中lambda表示式詳解Java
- Java中Lambda表示式的使用Java
- Java_介面回撥與匿名內部類Java
- Java之區域性匿名內部類物件Java物件
- Java8 Lambda表示式、Optional類淺析Java
- 八,Lambda表示式
- Python Lambda 表示式Python
- Java Lambda表示式Java
- 【Kotlin】Lambda表示式Kotlin
- kotlin lambda表示式Kotlin
- CPP lambda表示式
- Python - lambda 表示式Python
- Java | Lambda表示式Java