item 30 Jung inchul - JAVA-JIKIMI/EFFECTIVE-JAVA3 GitHub Wiki
Effective Java 3e μμ΄ν 30λ₯Ό μμ½ν λ΄μ© μ λλ€.
맀κ°λ³μν νμ
μ λ°λ μ μ μ νΈλ¦¬ν° λ©μλ
λ λ³΄ν΅ μ λ€λ¦μ΄λ€. μ컨λ Collectionsμ 'μκ³ λ¦¬μ¦' λ©μλ(binarySearch
, sort
λ±)λ λͺ¨λ μ λ€λ¦μ΄λ€.
public static Set union(Set s1, Set s2) {
Set result = new HashSet(s1);
result.addAll(s2);
return result;
}
λ©μλ μ μΈμμ μΈ μ§ν©(μ
λ ₯ 2κ°, λ°ν 1κ°)μ μμ νμ
μ νμ
맀κ°λ³μλ‘ λͺ
μνκ³ , λ©μλ μμμλ μ΄ νμ
맀κ°λ³μ
λ§ μ¬μ©νκ² μμ νλ©΄ λλ€.
public static Set<E> union(Set<E> s1, Set<E> s2) {
Set<E> result = new HashSet(s1);
result.addAll(s2);
return result;
}
λλλ‘ λΆλ³ κ°μ²΄λ₯Ό μ¬λ¬ νμ
μΌλ‘ νμ©ν μ μκ² λ§λ€μ΄μΌ ν λκ° μλ€. μ λ€λ¦μ λ°νμ
μ νμ
μ λ³΄κ° μκ±°λλ―λ‘ νλμ κ°μ²΄λ₯Ό μ΄λ€ νμ
μΌλ‘λ 맀κ°λ³μν
ν μ μλ€. νμ§λ§ μ΄λ κ² νλ €λ©΄ μμ²ν νμ
맀κ°λ³μμ λ§κ² λ§€λ² κ·Έ κ°μ²΄μ νμ
μ λ°κΏμ£Όλ μ μ ν©ν°λ¦¬
λ₯Ό λ§λ€μ΄μΌ νλ€. μ΄ ν¨ν΄μ μ λ€λ¦ μ±κΈν΄ ν©ν°λ¦¬
λΌ νλ€.
// μ λ€λ¦ μ±κΈν΄ ν©ν°λ¦¬ μμ (Collections.emptySet)
public static final <T> Set<T> emptySet() {
return (Set<T>) EMPTY_SET;
}
/**
* @serial include
*/
private static class EmptySet<E>
extends AbstractSet<E>
implements Serializable
{
private static final long serialVersionUID = 1582296315990362920L;
public Iterator<E> iterator() { return emptyIterator(); }
public int size() {return 0;}
public boolean isEmpty() {return true;}
public boolean contains(Object obj) {return false;}
public boolean containsAll(Collection<?> c) { return c.isEmpty(); }
public Object[] toArray() { return new Object[0]; }
public <T> T[] toArray(T[] a) {
if (a.length > 0)
a[0] = null;
return a;
}
// Override default methods in Collection
@Override
public void forEach(Consumer<? super E> action) {
Objects.requireNonNull(action);
}
@Override
public boolean removeIf(Predicate<? super E> filter) {
Objects.requireNonNull(filter);
return false;
}
@Override
public Spliterator<E> spliterator() { return Spliterators.emptySpliterator(); }
// Preserves singleton property
private Object readResolve() {
return EMPTY_SET;
}
}
public class CollectionsEmptySetExample1 {
public static void main(String[] args) {
//Create an empty Set
Set<String> EmptySet = Collections.<String>emptySet();
System.out.println("Empty Set: "+EmptySet);
}
}
// result : Empty Set: []
μ μ½λλ μ λ€λ¦ μ±κΈν΄
μ μ¬μ©νλ μ½λμ΄λ€. μ΄μ κ³Ό λμΌνκ² νλ³ν
μ νμ§ μμλ μ»΄νμΌ μ€λ₯λ κ²½κ³ κ° λ°μνμ§ μλλ€.
λλ, μκΈ° μμ μ΄ λ€μ΄κ° ννμμ μ¬μ©νμ¬ νμ
맀κ°λ³μμ νμ© λ²μ
λ₯Ό νμ ν μ μλ€.
λ°λ‘ μ¬κ·μ νμ
νμ μ΄λΌλ κ°λ
μ΄λ€. μ¬κ·μ νμ
νμ
μ μ£Όλ‘ νμ
μ μμ°μ μμλ₯Ό μ νλ Comparable
μΈν°νμ΄μ€μ ν¨κ» μ°μΈλ€.
public interface Comparable<T> {
int compareTo(T o);
}
Comparable
μ ꡬνν μμμ 컬λ μ
μ μ
λ ₯ λ°λ λ©μλλ€μ μ£Όλ‘ κ·Έ μμλ€μ μ λ ¬
νΉμ κ²μ
νκ±°λ, μ΅μκ°
μ΄λ μ΅λκ°
μ ꡬνλ μμΌλ‘ μ¬μ©λλ€. λ€μμ μ΄ μ μ½μ μ½λλ‘ ννν λͺ¨μ΅μ΄λ€.
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;
}
νμ
νμ μΈ <E extends Comparable<E>>
λ "λͺ¨λ νμ
Eλ μμ κ³Ό λΉκ΅ν μ μλ€"λΌκ³ μ½μ μ μλ€.
μ λ€λ¦ νμ
κ³Ό λ§μ°¬κ°μ§λ‘, ν΄λΌμ΄μΈνΈμμ μ
λ ₯ 맀κ°λ³μ
μ λ°νκ°
μ λͺ
μμ μΌλ‘ νλ³ν
ν΄μΌ νλ λ©μλλ³΄λ€ μ λ€λ¦ λ©μλ
κ° λ μμ νλ©° μ¬μ©νκΈ°λ μ½λ€. νμ
κ³Ό λ§μ°¬κ°μ§λ‘, λ©μλλ νλ³ν μμ΄ μ¬μ©ν μ μλ νΈμ΄ μ’μΌλ©°, λ§μ κ²½μ° κ·Έλ κ² νλ €λ©΄ μ λ€λ¦ λ©μλκ° λμ΄μΌ νλ€.