sealed class LinkedList<out T>
class Node<out T>(
val head: T,
val tail: LinkedList<T>,
): LinkedList<T>()
// 링크드리스트에서 Empty 노드를 싱글톤으로 사용
class Empty<T>: LinkedList<T>()
// 사용
val list: LinkedList<Int> = Node(1, Node(2, Node(3, Empty())))
emptyList
는 이를 활용해서 구현되어 있다.fun <T> emptyList(): List<T> {
return EMPTY_LIST
}
private val FIB_CACHE = mutableMapOf<Int, BigInteger>()
fun fib(n: Int): BigInteger = FIB_CACHE.getOrPut(n) {
if (n <= 1) BigInteger.ONE else fib(n - 1) + fib(n - 2)
}
// 컬렉션 내부의 최댓값 수를 세는 확장 함수
fun <T: Comparable<T>> Iterable<T>.countMax(): Int {
val max = this.max() // max 값을 찾아 두고 이를 활용해서 수를 세기에 가독성과 성능이 좋아진다.
return count { it == max }
}
private val IS_VALID_EMAIL_REGEX by lazy {
"/*...*/".toRegex()
}
class A {
val b by lazy { B() }
// ...
}
null
일 수 없다)