I okazuje się, że Codility niechcący kara ludzi, którzy znają nowszą Java'ę ;-)
Jeśli ktoś operuje na kolekcji przy pomocy pętli to może dostać ocenioną złożoność O(n), jeśli użyje strumieni i lambd to może dostać ocenioną złożoność O(n*log(n)).
A wszystko przez to, że w Java 8 lambdy nie są najszybsze.
Widać to świetnie gdy używa się computeIfAbsent, zamiast getOrDefault w mapach.
Bo kod z computeIfAbsent wykonuje się zwykle wolniej, mimo tego, że getOrDefault tworzy nowy obiekt za każdym razem gdy jest wołane.
A wszystko przez to, że lambda musi być najpierw zbudowana ;-) i po to kompilator dodaje wywołanie metody LambdaMetafactory.metafactory, które jest wołane przy pomocy invokedynamic.
A w Java 8 wywołanie tego trwa wieki....
Coś co wykonuje się w mniej niż 10 ms, może się wykonywać nawet 80 ms.
Na szczęście w Java 11 wydaje się, że wszystko jest szybsze i nie widać znaczącej różnicy w wykonaniu kodu z lambdami i bez.
Podobne postybeta
Zaczynam woleć Map
Mody w rekrutacji IT ;-)
Kilka prostych wzorów do szacowania :-)
Sztuczki tropiciela błędów - breakpoint na sterydach ;-)
Takie tam ;-)