item 44 JungHyunLyoo - JAVA-JIKIMI/EFFECTIVE-JAVA3 GitHub Wiki
μλ°κ° λλ€λ₯Ό μ§μνλ©΄μ, ν νλ¦Ώ λ©μλ ν¨ν΄μ 맀λ ₯μ΄ μ€κ³ ν¨μ κ°μ²΄λ₯Ό λ°λ μ μ ν©ν°λ¦¬λ μμ±μλ₯Ό μ 곡νλ λ°©μμ΄ μ£Όλͺ©(?)μ λ°κ³ μλ€.
LinkedHashMapμ removeEldestEntryμ μλ₯Ό λ€μ΄λ³΄μ.
protected boolean removeEldestEntry(Map.Entry<K,V> eldest) {
return false;
}
void afterNodeInsertion(boolean evict) { // possibly remove eldest
LinkedHashMap.Entry<K,V> first;
if (evict && (first = head) != null && removeEldestEntry(first)) {
K key = first.key;
removeNode(hash(key), key, null, false, true);
}
}
μ λ©μλλ₯Ό μ¬μ μνλ©΄ μΊμλ‘ μ¬μ©ν μκ° μλ€.
LinkedHashMapμ μ€λλ λ€μ ꡬννλ€λ©΄ ν¨μ κ°μ²΄λ₯Ό λ°λ μ μ ν©ν°λ¦¬λ μμ±μλ₯Ό μ 곡νμ κ²μ΄λ€.
@FunctionalInterface interface EldestEntryRemovalFunction<K,V> {
boolean remove(Map<K,V> map, Map.Entry<K,V> eldest);
}
μ΄λ κ² μΈν°νμ΄μ€λ₯Ό μ§μ λ§λ€μ΄μ μ¬μ©ν μλ μμ§λ§, java.util.function ν¨ν€μ§ μμ λ€μν ν¨μν μΈν°νμ΄μ€κ°
μ μλμ΄ μκΈ° λλ¬Έμ μ΄ νμ€ ν¨μν μΈν°νμ΄μ€λ₯Ό μ κ·Ή νμ©νλ κ²μ΄ ν¨μ¨μ μ΄λ€.
νμ€ ν¨μν μΈν°νμ΄μ€λ μ μ©ν λν΄νΈ λ©μλλ€λ λ§μ΄ μ 곡νλ€λ μ₯μ λ μλ€.
java.util.function ν¨ν€μ§μ μ΄ 43κ°μ μΈν°νμ΄μ€κ° μμ§λ§, μ΄ μ€ 6κ°μ κΈ°λ³Έ ννμ μΈν°νμ΄μ€λ§ κΈ°μ΅νλ©΄
λλ¨Έμ§ μΈν°νμ΄μ€λ€μ μ μΆν΄λΌ μ μλ€.
- UnaryOperator / T apply(T t) / String::toLowerCase
- BinaryOperator / T apply(T t1, T t2) / BigInteger::add
- Predicate / boolean test(T t) / Collection::isEmpty
- Function<T,R> / R apply(T t) / Arrays.asList
- Supplier / T get() / Instant:now
- Consumer / void accept(T t) / System.out::println
μ΄ κΈ°λ³Έ μΈν°νμ΄μ€λ€μ κΈ°λ³Έ νμ μΈ int, long, doubleμ©μΌλ‘ κ° 3κ°μ© λ³νμ΄ μ겨λλ€.
IntPredicate / LongPredicate / DoublePredicate
λν Function μΈν°νμ΄μ€λ κΈ°λ³Έ νμ μ λ°ννλ λ³νμ΄ μ΄ 9κ°κ° λ μλ€.
IntToDoubleFunction / IntToLongFunction / IntUnaryOperator(μΈμμ κ°μ νμ μ λ°ν)
κ·Έλ¦¬κ³ κΈ°λ³Έ ν¨μν μΈν°νμ΄μ€ μ€ μλ 3κ°μλ μΈμλ₯Ό 2κ°μ© λ°λ λ³ν μΈν°νμ΄μ€κ° μλ€.
BiPredicate<T, U> / BiFunction<T, U, R> / BiConsumer<T, U>
BiFunction<T, U, R>μλ λ€μ κΈ°λ³Έ νμ μ λ°ννλ μΈ λ³ν
ToIntBiFunction<T, U> / ToLongBiFunction<T, U> / ToDoubleFunction μ΄ μλ€.
Consumerμλ κ°μ²΄ μ°Έμ‘°μ κΈ°λ³Έ νμ νλ, μ¦ μΈμλ₯Ό 2κ° λ°λ λ³νμΈ
ObjDoubleConsumer / ObjIntConsumer / ObjLongConsumer κ° μ‘΄μ¬ νλ€.
λ§μ§λ§μΌλ‘ BooleanSupplier μΈν°νμ΄μ€λ booleanμ λ°ννλλ‘ ν Supplierμ λ³νμ΄λ€.