item 30 leekyunghee - JAVA-JIKIMI/EFFECTIVE-JAVA3 GitHub Wiki
-
ν΄λμ€μ λ§μ°¬κ°μ§λ‘ λ©μλλ μ λ€λ¦μΌλ‘ λ§λ€ μ μλ€.
-
맀κ°λ³μν νμ μ λ°λ μ μ μ νΈλ¦¬ν° λ©μλλ λ³΄ν΅ μ λ€λ¦μ΄λ€.
https://stackoverrun.com/ko/q/12305035
- Collectionsμ μκ³ λ¦¬μ¦ λ©μλ(binarySearch, sort λ±)λ λͺ¨λ μ λ€λ¦μ΄λ€.
- λ‘ νμ μ¬μ© - μν°ν¨ν΄
public static Set union(Set s1, Set s2) {
Set result = new HashSet(s1);
result.addAll(s2);
return result;
}
μ»΄νμΌμ λμ§λ§ κ²½κ³ κ° λ°μνλ€.
κ²½κ³ λ₯Ό μμ κΈ° μν΄μλ μ΄ λ©μλλ₯Ό type safeνκ² λ§λ€μ΄μΌ νλ€. μ λ€λ¦μ ν΅ν΄ type safeνκ²λ§λ€μ΄ 보μ
// μ»΄νμΌμ λμ§λ§ κ²½κ³ κ° λκ° λ°μνλ€.
Union.java:5: warning: [unchecked] unchecked call to HashSet(Collection<? extends E> as a member of raw type HashSet
Set result = new HashSet(s1);
*μλ¬λ°μ*
Union.java:6: warning: [unchecked] unchecked call to addAll(Collection<? extends E> as a member of raw type Set
result.addAll(s2);
κ²½κ³ λ₯Ό μμ λ €λ©΄ μ΄ λ©μλλ₯Ό νμ μμ νκ² λ§λ€μ΄μΌ νλ€. λ©μλ μ μΈμμμ μΈ μ§ν©(μ λ ₯ 2κ°, λ°ν 1κ°)μ μμ νμ μ νμ 맀κ°λ³μλ‘ λͺ μ
λ©μλ μμμλ μ΄ νμ 맀κ°λ³μλ§ μ¬μ©νκ² μμ νλ©΄ λλ€. (νμ 맀κ°λ³μλ€μ μ μΈνλ) νμ 맀κ°λ³μ λͺ©λ‘μ λ©μλμ μ νμμ λ°ν νμ μ¬μ΄μ μ¨λ€.
- λ€μ μ½λμμ νμ 맀κ°λ³μ λͺ©λ‘μ λ©μλμ μ νμμ λ°ν νμ μ¬μ΄μ μ¨λ€.
- λ€μ μ½λμμ νμ 맀κ°λ³μ λͺ©λ‘μ μ΄κ³ λ°ν νμ μ Setμ΄λ€.
- νμ λ§€κ° λ³μμ λͺ λͺ κ·μΉμ μ λ€λ¦ λ©μλλ μ λ€λ¦ νμ μ΄λ λκ°λ€. (μμ΄ν 29, 68)
// μ λ€λ¦ λ©μλ
public static <E> Set<E> union(Set<E> s1, Set<E> s2) {
Set<E> result = new HashSet<>(s1);
result.addAll(s2);
return result;
}
- λ¨μν μ λ€λ¦ λ©μλλΌλ©΄ μΆ©λΆνλ€
- μ΄ λ©μλλ κ²½κ³ μμ΄ μ»΄νμΌλλ©° νμ μμ νκ³ μ°κΈ°λ μ½λ€.
public static void main(String[] args) {
Set<String> guys = Set.of("ν°", "λ", "ν리");
Set<String> guys = Set.of("λ리", "λͺ¨μ", "컬리");
Set<String> aflCio = union(guys, stooges);
System.out.println(aflCio);
}
- μ΄ νλ‘κ·Έλ¨μ μ€ννλ©΄ "[λͺ¨μ, ν°, ν΄λ¦¬, λ리, 컬리, λ]" μ΄ μΆλ ₯λλ€. (μμ μμλ ꡬν λ°©μμ λ°λΌμ λ¬λΌμ§λ€.)
- union λ©μλλ μ§ν© 3κ° (μ λ ₯ 2κ°, λ°ν 1κ°)μ νμ μ΄ λͺ¨λ κ°μμΌ νλ€. μ΄λ₯Ό νμ μ μμΌλμΉ΄λ νμ (μμ΄ν 31)μ μ¬μ©νμ¬ λ μ μ°νκ² κ°μ ν μ μλ€.
- λλλ‘ λΆλ³ κ°μ²΄λ₯Ό μ¬λ¬ νμ μΌλ‘ νμ©ν μ μκ² λ§λ€μ΄μΌ ν λκ° μλ€.
- μ λ€λ¦μ λ°νμμ νμ μ λ³΄κ° μκ±°(μμ΄ν 28)λλ―λ‘ νλμ κ°μ²΄λ₯Ό μ΄λ€ νμ μΌλ‘λ 맀κ°λ³μνν μ μλ€.
νμ§λ§ μ΄λ κ² νλ €λ©΄ μμ²ν νμ λ§€κ° λ³μμ λ§κ² λ§€λ² κ·Έ κ°μ²΄μ νμ μ λ°κΏμ£Όλ μ μ ν©ν°λ¦¬λ₯Ό λ§λ€μ΄μΌ νλ€.
- μ΄ ν¨ν΄μ μ λ€λ¦ μ±κΈν΄ ν©ν°λ¦¬λΌ νλ©° Collections.reverseOrder κ°μ ν¨μ κ°μ²΄(μμ΄ν 42)λ Collections.emptySet κ°μ 컬λ μ μ©μΌλ‘ μ¬μ©νλ€.
- μλ° λΌμ΄λΈλ¬λ¦¬μ Function.identityλ₯Ό μ¬μ©νλ©΄ λλ€.(μμ΄ν 59)
- νλ±ν¨μ κ°μ²΄λ μνκ° μμΌλ μμ²ν λλ§λ€ μλ‘ μμ±νλ κ²μ λλΉλ€.
- μλ°μ μ λ€λ¦μ΄ μ€μ²΄νλλ€λ©΄ νλ±ν¨μλ₯Ό νμ λ³λ‘ νλμ© λ§λ€μ΄μΌ νκ² μ§λ§ μκ±° λ°©μμ μ¬μ©ν λμ μ λ€λ¦ μ±κΈν΄ νλλ©΄ μΆ©λΆνλ€.
private static UnaryOperator<Object> IDENTITY_FN = (t) -> t;
@SuppressWarnings("unchecked")
public static <T> UnaryOPerator<T> identityFunction() {
return (UnaryOperator<T>) INDENTITY_FN;
}
- INDENTITY_FNμ UnaryOperatorλ‘ νλ³ννλ©΄ λΉκ²μ¬ νλ³ν κ²½κ³ κ° λ°μνλ€.
- Tκ° μ΄λ€ νμ μ΄λ UnaryOperatorλ UnaryOperatorκ° μλκΈ° λλ¬Έμ΄λ€.
- νλ±ν¨μλ μ λ ₯κ°μ μμ μμ΄ κ·Έλλ‘ λ°ννλ νΉλ³ν ν¨μμ΄λ―λ‘ Tκ° μ΄λ€ νμ μ΄λ UnaryOperatorλ₯Ό μ¬μ©ν΄λ νμ μμ νλ€.
- μ£Όλ‘ νμ μ μμ°μ μμλ₯Ό μ νλ Comparable μΈν°νμ΄μ€(μμ΄ν 14)μ ν¨κ» μ μ°μΈλ€.
public interface Comparable<T> {
int compareTo(T o);
}
- μ¬κΈ°μ νμ 맀κ°λ³μ Tλ Comparableλ₯Ό ꡬνν νμ μ΄ λΉκ΅ν μ μλ μμμ νμ μ μ μνλ€.
- μ€μ λ‘ κ±°μ λͺ¨λ νμ μ μμ κ³Ό κ°μ νμ μ μμμλ§ λΉκ΅ν μ μλ€.
- λ°λΌμ Stringμ Comparableμ ꡬννκ³ Integerλ Comparableλ₯Ό ꡬννλ μμ΄λ€.
Comparableμ ꡬνν μμμ 컬λ μ μ μ λ ₯λ°λ λ©μλλ€μ μ£Όλ‘ κ·Έ μμλ€μ μ λ ¬ νΉμ κ²μνκ±°λ μ΅μκ°μ΄λ μ΅λκ°μ ꡬνλ μμΌλ‘ μ¬μ©λλ€.
μ΄ κΈ°λ₯μ μννλ €λ©΄ 컬λ μ μ λ΄κΈ΄ λͺ¨λ μμκ° μνΈ λΉκ΅λ μ μμ΄μΌ νλ€.
νμ νμ μΈ <E extends Comparable>λ "λͺ¨λ νμ Eλ μμ κ³Ό λΉκ΅ν μ μλ€"λΌκ³ μ½μ μ μλ€.
// 컬λ μ
μ λ΄κΈ΄ μμμ μμ°μ μμλ₯Ό κΈ°μ€μΌλ‘ μ΅λκ°μ κ³μ°νλ©° μ»΄νμΌ μ€λ₯λ κ²½κ³ λ λ°μνμ§ μλλ€.
public static <E extends Comparable<E>> E max(Collection<E> c) {
if(c.isEmpty())
throw new IllegalArgumentException("컬λ μ
μ΄ λΉμ΄ μμ΅λλ€.");
E result = null;
for (E e : c)
if (result == null || e.compareTo(result) > 0)
result = Objects.requireNonNull(e);
return result;
}
μ΄ λ©μλμ λΉ μ»¬λ μ μ 건λ΄λ©΄ IllegalArgumentExceptionμ λμ§λ Optionalλ₯Ό λ°ννλλ‘ κ³ μΉλ νΈμ΄ λμ κ²μ΄λ€. (μμ΄ν 55)
- μ λ€λ¦ νμ κ³Ό λ§μ°¬κ°μ§λ‘ ν΄λΌμ΄μΈνΈμμ μ λ ₯ 맀κ°λ³μμ λ°νκ°μ λͺ μμ μΌλ‘ νλ³νν΄μΌ νλ λ©μλλ³΄λ€ μ λ€λ¦ λ©μλκ° λ μμ νλ©° μ¬μ©νκΈ°λ μ½λ€.
- νμ κ³Ό λ§μ°¬κ°μ§λ‘ λ©μλλ νλ³ν μμ΄ μ¬μ©ν μ μλ νΈμ΄ μ’μΌλ©° λ§μ κ²½μ° κ·Έλ κ² νλ €λ©΄ μ λ€λ¦ λ©μλκ° λμ΄μΌ νλ€.
- νλ³ν ν΄μ€μΌ νλ κΈ°μ‘΄ λ©μλλ μ λ€λ¦νκ² λ§λ€μ. (μμ΄ν 26 λ‘ νμ μ μ¬μ©νμ§ λ§λΌ.)