{% hint style="info" %} Comparable μΈν°νμ΄μ€μ μ μΌλ¬΄μ΄ν λ©μλλ‘ λ¨μ λμΉμ± λΉκ΅μ λν΄ μμκΉμ§ λΉκ΅ν μ μμΌλ©°, μ λ€λ¦νλ€.1 {% endhint %}
- 3μ₯μ λ€λ₯Έ λ©μλλ€κ³Ό λ¬λ¦¬ compareToλ Objectμ λ©μλκ° μλλ€.
- μ±κ²©μ 2κ°μ§λ₯Ό μ μΈνλ©΄, Object equalsμ κ°μ
- compareTo λ₯Ό ꡬννλ€λ κ²μ, μμκ° μ‘΄μ¬νλ€λ κ²μ΄κ³ , Arrays.sort λ₯Ό νμ©ν μ λ ¬μ΄ κ°λ₯νλ€λ κ²
- 보ν΅μ sqlμμ order byλ‘ νλ€λ κ²
public class WordList {
public static void main(String[] args) {
Set<String> s = new TreeSet ();
Collections.addAll(s, args);
System.out.println(s);
}
}
- Stringμ΄ CompareTo λ₯Ό ꡬνν λλΆ2μ μλ μ λ ¬λλ TreeSet μλ£κ΅¬μ‘° μ μΆλ ₯νλ©΄ μνλ²³μμΌλ‘ μ λ ¬λμ΄ μΆλ ₯
μ¬μ€μ μλ° νλ«νΌ λΌμ΄λΈλ¬λ¦¬μ λͺ¨λ κ° ν΄λμ€μ μ΄κ±° νμ (μμ΄ν 34)μ΄ Comparableμ ꡬννλ€. μνλ²³, μ«μ, μ°λ κ°μ΄ μμκ° λͺ νν κ° ν΄λμ€λ₯Ό μμ±νλ€λ©΄ λ°λμ Comparable μΈν°νμ΄μ€λ₯Ό ꡬννμ.
public interface Comparable<T> {
int compareTo(T t);
}
{% hint style="info" %}
compareTo
κ° equals
μ μΌκ΄μ±μ μ μ§νλ κ²μ΄ κΆμ₯λμ§λ§, μ΄λ νμλ μλλ€. λμΉμ±κ³Ό μΆμ΄μ±μ νμμ΄λ€. νμ§λ§λ§μ½ compareTo
μ equals
κ° μΌκ΄λμ§ μμΌλ©΄ TreeSet
κ°μ μ λ ¬λ 컬λ μ
μμ μμμΉ λͺ»ν λμμ΄ λ°μν μ μλ€.
{% endhint %}
- λμΉμ±:
x.compareTo(y)
κ° μμλ©΄,y.compareTo(x)
λ μμμ¬μΌ νκ³ ,x.compareTo(y)
κ° 0μ΄λ©΄y.compareTo(x)
λ 0μ΄μ΄μΌ νλ€. - μΆμ΄μ±:
x.compareTo(y)
κ° μμμ΄κ³ ,y.compareTo(z)
κ° μμλΌλ©΄,x.compareTo(z)
λ μμμ¬μΌ νλ€. - μΌκ΄μ±:
x.compareTo(y)
κ° 0μ΄λ©΄,x.compareTo(z)
μy.compareTo(z)
λ κ°μ κ°μ κ°μ ΈμΌ νλ€.
λͺ¨λ κ°μ²΄μ λν΄ μ μ λμΉκ΄κ³λ₯Ό λΆμ¬νλ equals λ©μλμ λ¬λ¦¬, compareTo
λ νμ
μ΄ λ€λ₯Έ κ°μ²΄λ₯Ό μ κ²½ μ°μ§ μμλ λλ€.
νμ
μ΄ λ€λ₯Έ κ°μ²΄κ° μ£Όμ΄μ§λ©΄ κ°λ¨ν ClassCastException
μ λμ Έλ λλ€. compareTo κ·μ½μ μ§ν€μ§ λͺ»νλ©΄ λΉκ΅λ₯Ό νμ©νλ ν΄λμ€μ μ΄μΈλ¦¬μ§ λͺ»νλ€.
{% hint style="info" %}
compareTo
λ©μλμ λ§μ§λ§ κ·μ½μ νμ μ¬νμ μλμ§λ§, λ°λμ μ§ν€λ κ²μ΄ μ’λ€. μ΄ κ·μ½μ κ°λ¨ν λ§ν΄, compareTo
λ©μλλ₯Ό ν΅ν΄ μνν λμΉμ± ν
μ€νΈμ κ²°κ³Όκ° equals
λ©μλμ κ²°κ³Όμ μΌμΉν΄μΌ νλ€λ κ²μ΄λ€. μ΄ κ·μ½μ μ μ§ν€λ©΄ compareTo
μ λ°λ₯Έ μ λ ¬ μμμ equals
μ κ²°κ³Όκ° μΌκ΄λκ² λλ€.
{% endhint %}
κ·Έλ¬λ compareTo
μ μμμ equals
μ κ²°κ³Όκ° μΌμΉνμ§ μλ ν΄λμ€λ μ¬μ ν λμμ νλ€. λ€λ§, μ΄λ¬ν ν΄λμ€λ₯Ό μ λ ¬λ 컬λ μ
(μ: TreeSet
, TreeMap
)μ λ£μΌλ©΄ ν΄λΉ 컬λ μ
μ΄ κ΅¬νν μΈν°νμ΄μ€(Collection
, Set
, Map
)μ λμκ³Ό μλ°μκ° λ°μν μ μλ€. μ΄λ μ΄ μΈν°νμ΄μ€λ€μ΄ equals
λ©μλμ κ·μ½μ λ°λ₯΄λλ‘ μ μλμ΄ μμ§λ§, μ λ ¬λ 컬λ μ
μ λμΉμ± λΉκ΅ μ equals
λμ compareTo
λ₯Ό μ¬μ©νκΈ° λλ¬Έμ΄λ€.
κΆμ₯ μ¬ν:
- κ°λ₯νλ€λ©΄
x.equals(y)
κ°true
μΌ λx.compareTo(y)
λ λ°λμ0
μ λ°ννλλ‘ κ΅¬νν΄μΌ νλ€. - λ°λλ‘
x.compareTo(y)
κ°0
μΌ λx.equals(y)
κ°true
κ° λλλ‘ κ΅¬ννλ©΄ λμ± μ’λ€.
compareTo
μ equals
κ° μΌκ΄λμ§ μλ ν΄λμ€λ‘ BigDecimal
μ μλ‘ λ€ μ μλ€.
{% hint style="info" %}
BigDecimal
ν΄λμ€μμ equals
λ μ λ°λ(precision)κΉμ§ κ³ λ €νμ¬ λΉκ΅νλ€.
- μλ₯Ό λ€μ΄,
new BigDecimal("1.0")
κ³Όnew BigDecimal("1.00")
μequals
λ‘ λΉκ΅νλ©΄ λ€λ₯Έ κ°μ²΄λ‘ κ°μ£Ό - νμ§λ§
compareTo
λ μνμ μΈ κ°λ§μ λΉκ΅νλ―λ‘, λ κ°μ²΄λ₯Ό λμΌν κ°μΌλ‘ κ°μ£Ό - μ΄λ‘ μΈν΄
HashSet
κ³ΌTreeSet
μμ μμμ κ°μκ° λ¬λΌμ§λ λ¬Έμ κ° λ°μνλ€. {% endhint %}
import java.math.BigDecimal;
import java.util.HashSet;
import java.util.TreeSet;
public class BigDecimalExample {
public static void main(String[] args) {
// HashSet μμ
HashSet<BigDecimal> hashSet = new HashSet<>();
hashSet.add(new BigDecimal("1.0"));
hashSet.add(new BigDecimal("1.00"));
System.out.println("HashSet ν¬κΈ°: " + hashSet.size()); // μΆλ ₯: 2
// TreeSet μμ
TreeSet<BigDecimal> treeSet = new TreeSet<>();
treeSet.add(new BigDecimal("1.0"));
treeSet.add(new BigDecimal("1.00"));
System.out.println("TreeSet ν¬κΈ°: " + treeSet.size()); // μΆλ ₯: 1
}
}
μ€λͺ :
HashSet
μnew BigDecimal("1.0")
κ³Όnew BigDecimal("1.00")
μ μΆκ°νλ©΄,equals
λ©μλλ‘ λΉκ΅νμ¬ λ κ°μ²΄λ λ€λ₯΄λ€κ³ νλ¨νλ―λ‘HashSet
μ μμλ 2κ°κ° λλ€.- λ°λ©΄μ
TreeSet
μcompareTo
λ©μλλ‘ λΉκ΅νμ¬ λ κ°μ²΄λ₯Ό κ°λ€κ³ νλ¨νλ―λ‘TreeSet
μ μμλ 1κ°κ° λλ€. - μ΄λ‘ μΈν΄
HashSet
κ³ΌTreeSet
μμ κ°μBigDecimal
κ°μ²΄λ₯Ό μ¬μ©νλλΌλ μμμ κ°μκ° λ¬λΌμ§λ λ¬Έμ κ° λ°μνλ€.
π€ μ.. μ΄κ±°λ HashSetκ³Ό TreeSet μ μλ£κ΅¬μ‘°μ λ¬Έμ μλ?
λ΅λ³ : μ΄λ¬ν νμμ BigDecimal
ν΄λμ€μ μ€κ³μ 컬λ μ
νλ μμν¬μ λμ λ°©μμ μ°¨μ΄λ‘ μΈν΄ λ°μνλ κ²μ
λλ€. μΌλ°μ μΌλ‘ equals()
μ compareTo()
λ©μλλ μΌκ΄λκ² λμνλλ‘ κ΅¬ννλ κ²μ΄ κΆμ₯λ©λλ€. μ¦, equals()
λ‘ κ°λ€κ³ νλ¨λλ κ°μ²΄λ compareTo()
λ‘ λΉκ΅νμ λ 0
μ λ°νν΄μΌ ν©λλ€.
νμ§λ§ BigDecimal
ν΄λμ€λ μ λ°λ(precision)λ₯Ό μ€μμνκΈ° λλ¬Έμ equals()
λ©μλμμ μ€μΌμΌκΉμ§ κ³ λ €νλλ‘ μ€κ³λμμ΅λλ€. λ°λ©΄μ μμΉμ μΈ λΉκ΅λ₯Ό μν compareTo()
λ μ€μΌμΌμ 무μνκ³ κ°λ§ λΉκ΅νλλ‘ λμ΄ μμ΅λλ€.
λ°λΌμ μ΄λ ν΄λμ€μ μ€κ³ μλμ λ°λ₯Έ κ²°κ³Όμ΄λ©°, 컬λ μ νλ μμν¬μ λμκ³Ό μΆ©λν μ μλ λΆλΆμ λλ€. μ΄λ¬ν μ°¨μ΄λ‘ μΈν΄ λ°μνλ λ¬Έμ λ κ°λ°μκ° μΈμ§νκ³ μ‘°μ¬ν΄μΌ ν λΆλΆμ΄μ§, Java μΈμ΄λ 컬λ μ νλ μμν¬μ ꡬ쑰μ μΈ κ²°ν¨μ΄λΌκ³ 보기λ μ΄λ ΅μ΅λλ€.
λ°λΌμ, ꡬ쑰μ μΈ λ¬Έμ λΌκΈ°λ³΄λ€λ ν΄λΉ ν΄λμ€μ 컬λ μ μ¬μ© μ μ£Όμν΄μΌ ν μ¬νμΌλ‘ 보λ κ²μ΄ λ§μ΅λλ€
π€ νμ§λ§ μμ μ½λλ compareToλ©μλκ° μλλΌ sizeλΌλ λ©μλλ₯Ό μ΄κ±° μλκ°?
- μμ μ½λμμ
size()
λ©μλλ₯Ό μ¬μ©ν κ²μ μ§ν©μ μ€μ λ‘ λͺ κ°μ μμκ° μ μ₯λμλμ§ νμΈνκΈ° μν κ²μ λλ€. - μμμ κ°μκ° λ¬λΌμ§λ μ΄μ λ
HashSet
κ³ΌTreeSet
μ΄ μμμ λμΌμ±μ νλ¨νλ κΈ°μ€μ΄ λ€λ₯΄κΈ° λλ¬Έμ λλ€.HashSet
μequals()
μhashCode()
λ₯Ό μ¬μ©νκ³ ,TreeSet
μcompareTo()
λ₯Ό μ¬μ©ν©λλ€.BigDecimal
ν΄λμ€μequals()
μcompareTo()
λ©μλκ° μΌκ΄λμ§ μκ² λμνκΈ° λλ¬Έμ μ΄λ° μ°¨μ΄κ° λ°μν©λλ€.
{% hint style="info" %}
μ¦, size()
λ©μλλ₯Ό νΈμΆνκΈ° μ μ μμλ₯Ό μΆκ°νλ κ³Όμ μμ compareTo()
μ equals()
λ©μλκ° μ΄λ»κ² λμνλμ§κ° μ§ν©μ μμ κ°μμ μν₯μ λ―ΈμΉκ² λ©λλ€.
{% endhint %}
HashSet
μ λμ μ리
HashSet
μ μμλ₯Ό μΆκ°ν λ, μμμhashCode()
κ°μ μ¬μ©νμ¬ λ²ν·μ κ²°μ ν©λλ€.- μ΄λ―Έ κ°μ
hashCode()
λ₯Ό κ°μ§ μμκ° μλ κ²½μ°,equals()
λ©μλλ₯Ό μ¬μ©νμ¬ λ μμκ° λμΌνμ§ λΉκ΅ν©λλ€. equals()
λ©μλκ°false
λ₯Ό λ°ννλ©΄, ν΄λΉ μμλ μ§ν©μ μλ‘μ΄ μμλ‘ μΆκ°λ©λλ€.
2. TreeSet
μ λμ μ리
TreeSet
μ μ΄μ§ νμ νΈλ¦¬λ₯Ό κΈ°λ°μΌλ‘ ꡬνλμ΄ μμΌλ©°, μμλ₯Ό μ λ ¬λ μμλ‘ μ μ§ν©λλ€.- μμλ₯Ό μΆκ°ν λ,
compareTo()
λ©μλλ μ 곡λComparator
λ₯Ό μ¬μ©νμ¬ μμμ μμμ λμΌμ±μ νλ¨ν©λλ€. compareTo()
λ©μλκ°0
μ λ°ννλ©΄, λ μμλ λμΌν κ²μΌλ‘ κ°μ£Όλμ΄ μλ‘μ΄ μμλ‘ μΆκ°λμ§ μλλ€.
- ν΄κ²° λ°©λ² π
compareTo()
μequals()
μ ꡬνμ μΌκ΄λκ² μμ νλ€.- νμ§λ§
BigDecimal
ν΄λμ€λ Java νμ€ λΌμ΄λΈλ¬λ¦¬μ ν΄λμ€μ΄λ―λ‘ μ°λ¦¬κ° μμ ν μ μλ€.
- νμ§λ§
- 컀μ€ν
Comparatorλ₯Ό μ¬μ©νμ¬
TreeSet
μ λμμ μμ νλ€.- μ€μΌμΌκΉμ§ κ³ λ €νλλ‘ Comparatorλ₯Ό μ μνλ©΄
TreeSet
μμλ μμμ κ°μκ° 2κ°κ° λ¨
- μ€μΌμΌκΉμ§ κ³ λ €νλλ‘ Comparatorλ₯Ό μ μνλ©΄
compareTo
λ©μλλ₯Ό μ¬λ°λ₯΄κ² ꡬννκ³ ,equals
μμ μΌκ΄μ±μ μ μ§νλ λ°©λ²μ μ΄ν΄ν μ μλ€. μ΄λ μ½λμ μ λ’°μ±κ³Ό μ μ§λ³΄μμ±μ λμ΄κ³ , 컬λ μ νλ μμν¬λ₯Ό μ¬μ©ν λ λ°μν μ μλ μ€λ₯λ₯Ό μλ°©νλ λ° μ€μ
π₯ 컬λ μ μ¬μ© μ μ£Όμμ¬ν
- 컬λ μ μ μμλ₯Ό μΆκ°ν λ, ν΄λΉ 컬λ μ μ΄ μμμ λμΌμ±μ μ΄λ€ κΈ°μ€μΌλ‘ νλ¨νλμ§ μμμΌ νλ€.
- equals()μ compareTo() λ©μλμ ꡬνμ΄ μΌκ΄λμ§ μμΌλ©΄ 컬λ μ μμ μκΈ°μΉ μμ λμμ΄ λ°μν μ μλ€.
compareTo
λ©μλλ₯Ό μμ±ν λλ equals
λ©μλμ λΉμ·ν μλ Ήμ λ°λ₯΄μ§λ§, λͺ κ°μ§ μ°¨μ΄μ μ μ£Όμν΄μΌ νλ€.
- νμ
κ²μ¬μ νλ³ν λΆνμ:
Comparable
μ μ λ€λ¦ μΈν°νμ΄μ€μ΄λ―λ‘,compareTo
λ©μλμ μΈμ νμ μ μ»΄νμΌ νμμ μ ν΄μ§λ€.- μΈμμ νμ μ΄ μλͺ»λλ©΄ μ»΄νμΌ μμ²΄κ° λμ§ μμΌλ―λ‘, λ°νμ νμ κ²μ¬λ νλ³νμ΄ νμ μλ€.
null
μ²λ¦¬:compareTo
λ©μλμnull
μ μΈμλ‘ λ£μΌλ©΄NullPointerException
μ λμ§λ κ²μ΄ μΌλ°μ μ΄λ€.- μ€μ λ‘λ μΈμ(
null
)μ λ©€λ²μ μ κ·Όνλ €λ μκ° μ΄ μμΈκ° λ°μνλ€.
- νλ λΉκ΅ λ°©λ²:
compareTo
λ©μλλ κ° νλκ° λμΉμΈμ§λ₯Ό λΉκ΅νλ κ²μ΄ μλλΌ, μμλ₯Ό λΉκ΅νλ€.- κΈ°λ³Έ νμ
νλλ
<
,>
μ°μ°μλ₯Ό μ¬μ©νμ¬ λΉκ΅νλ€. - κ°μ²΄ μ°Έμ‘° νλλ ν΄λΉ ν΄λμ€μ
compareTo
λ©μλλ₯Ό μ¬κ·μ μΌλ‘ νΈμΆνμ¬ λΉκ΅νλ€. - Comparableμ ꡬννμ§ μμ νλλ νμ€μ΄ μλ μμλ‘ λΉκ΅ν΄μΌ νλ κ²½μ°μλ
Comparator
λ₯Ό μ¬μ©νλ€.
{% hint style="info" %}
μλ° 7μ΄νλΆν°λcompareTo λ©μλμμ κ΄κ³ μ°μ°μ οΌμ οΌ λ₯Ό μ¬μ©νλ μ΄μ λ°©μμ κ±°μΆμ₯μ€λ½κ³ μ€λ₯λ₯Ό μ λ°νλ , μ΄μ λ μΆμ²νμ§ μλλ€. λ°μ±λ κΈ°λ³Έ νμ
ν΄λμ€λ€μ μλ‘ μΆκ°λ μ μ λ©μλμΈ compare
λ₯Ό μ΄μ©νλ©΄ λλ€.
{% endhint %}
ν΄λμ€μ ν΅μ¬ νλκ° μ¬λ¬ κ°λΌλ©΄ μ΄λ κ²μ λ¨Όμ λΉκ΅νλλκ° μ€μν΄μ§λ€. κ°μ₯ μ€μν νλλΆν° λΉκ΅ν΄λκ°λ κ²μ΄ μ’λ€.
- λΉκ΅ κ²°κ³Όκ° 0μ΄ μλλΌλ©΄, μ¦ μμκ° κ²°μ λλ©΄ κ·Έ κ²°κ³Όλ₯Ό 곧μ₯ λ°ννλ€.
- κ°μ₯ μ€μν νλκ° κ°λ€λ©΄, κ·Έλ€μμΌλ‘ μ€μν νλλ₯Ό λΉκ΅ν΄λκ°λ€.
μμ: PhoneNumber
ν΄λμ€μ compareTo
λ©μλ
public int compareTo(PhoneNumber pn) {
int result = Short.compare(areaCode, pn.areaCode); // κ°μ₯ μ€μν νλ λΉκ΅
if (result == 0) {
result = Short.compare(prefix, pn.prefix); // λ λ²μ§Έλ‘ μ€μν νλ λΉκ΅
if (result == 0) {
result = Short.compare(lineNum, pn.lineNum); // μΈ λ²μ§Έλ‘ μ€μν νλ λΉκ΅
}
}
return result;
short.compare
λ₯Ό μ¬μ©νμ¬short
νμ νλλ₯Ό λΉκ΅νλ€.- μ΄λ κ² νλ©΄ μ½λκ° κ°κ²°ν΄μ§κ³ , μ€λ²νλ‘μ° λ±μ λ¬Έμ λ₯Ό λ°©μ§ν μ μλ€.
μλ° 8λΆν°λ Comparator
μΈν°νμ΄μ€μ λΉκ΅μ μμ± λ©μλλ€μ΄ μΆκ°λμ΄, λ©μλ μ°μ λ°©μμΌλ‘ λΉκ΅μλ₯Ό μμ±ν μ μλ€. μ΄λ₯Ό νμ©νλ©΄ compareTo
λ©μλλ₯Ό λ κ°κ²°νκ² κ΅¬νν μ μλ€.
μμ: PhoneNumber
ν΄λμ€μ compareTo
λ©μλ
import static java.util.Comparator.comparingInt;
private static final Comparator<PhoneNumber> COMPARATOR =
comparingInt((PhoneNumber pn) -> pn.areaCode)
.thenComparingInt(pn -> pn.prefix)
.thenComparingInt(pn -> pn.lineNum);
@Override
public int compareTo(PhoneNumber pn) {
return COMPARATOR.compare(this, pn);
}
comparingInt
λ©μλλ ν€ μΆμΆ ν¨μλ₯Ό λ°μ κ·Έ ν€λ₯Ό κΈ°μ€μΌλ‘ λΉκ΅νλComparator
λ₯Ό μμ±thenComparingInt
λ©μλλ₯Ό μ¬μ©νμ¬ μΆκ°μ μΈ νλλ₯Ό μμ°¨μ μΌλ‘ λΉκ΅νλ€.
μ£Όμμ¬ν:
- μ΄ λ°©μμ μ½λμ κ°κ²°ν¨μ μ 곡νμ§λ§, μ½κ°μ μ±λ₯ μ νκ° μμ μ μλ€. ν μ€νΈ κ²°κ³Ό μ½ 10% μ λ λλ €μ§ μ μλ€.
- λ°λΌμ μ±λ₯μ΄ μ€μν μν©μμλ μ ν΅μ μΈ λ°©μμΌλ‘ ꡬννλ κ²μ΄ μ’μ μ μμ΅λλ€.
- μ ν΅λ°©μ
public class PhoneNumber implements Comparable<PhoneNumber> {
private final short areaCode;
private final short prefix;
private final short lineNum;
// μμ±μ λ° κΈ°ν λ©μλ μλ΅
@Override
public int compareTo(PhoneNumber pn) {
int result = Short.compare(areaCode, pn.areaCode);
if (result == 0) {
result = Short.compare(prefix, pn.prefix);
if (result == 0) {
result = Short.compare(lineNum, pn.lineNum);
}
}
return result;
}
}
Comparator
λ λ€μν 보쑰 μμ± λ©μλλ€μ μ 곡νλ€.
- μ«μ νμ
νλλ₯Ό λΉκ΅νκΈ° μν λ©μλ:
comparingInt
,comparingLong
,comparingDouble
thenComparingInt
,thenComparingLong
,thenComparingDouble
- κ°μ²΄ μ°Έμ‘° νμ
νλλ₯Ό λΉκ΅νκΈ° μν λ©μλ:
comparing
λ©μλ: ν€ μΆμΆμλ₯Ό λ°μ ν€μ μμ° μμλ μ§μ νComparator
λ‘ λΉκ΅thenComparing
λ©μλ: μΆκ°μ μΈ λΉκ΅ κΈ°μ€μ μ§μ
μμ: κ°μ²΄ μ°Έμ‘° νλ λΉκ΅
javaμ½λ 볡μ¬Comparator<Person> personComparator = Comparator
.comparing(Person::getLastName)
.thenComparing(Person::getFirstName)
.thenComparingInt(Person::getAge);
Person
ν΄λμ€μlastName
,firstName
,age
νλλ₯Ό μμ°¨μ μΌλ‘ λΉκ΅
κ°λ κ°μ μ°¨μ΄λ₯Ό λ°ννμ¬ λΉκ΅νλ compareTo
λ©μλλ₯Ό λ³Ό μ μλ€.
// μλͺ»λ ꡬν - μ¬μ©νμ§ λ§ κ²!
public int compareTo(PhoneNumber pn) {
return areaCode - pn.areaCode;
}
- μ΄ λ°©μμ μ€λ²νλ‘μ°λ μΈλνλ‘μ°κ° λ°μν μ μμ΄ μ λ’°ν μ μλ€.
- λν, λΆλμμμ νμ μμλ μ λ°λ μμ€μ΄ λ°μν μ μλ€.
μ¬λ°λ₯Έ ꡬν λ°©μ:
public int compareTo(PhoneNumber pn) {
int result = Short.compare(areaCode, pn.areaCode);
if (result == 0) {
result = Short.compare(prefix, pn.prefix);
if (result == 0) {
result = Short.compare(lineNum, pn.lineNum);
}
}
return result;
}
- μ μ
compare
λ©μλλ₯Ό μ¬μ© - λλ
Comparator
μμ± λ©μλλ₯Ό νμ©νλ€.
μ μ compare
λ©μλ νμ©:
static Comparator<Object> hashCodeOrder = new Comparator<Object>() {
public int compare(Object o1, Object o2) {
return Integer.compare(o1.hashCode(), o2.hashCode());
}
};
Integer.compare
λ₯Ό μ¬μ©νμ¬ μ€λ²νλ‘μ° μμ΄ μμ νκ² λΉκ΅νλ€.
2. λΉκ΅μ μμ± λ©μλ νμ©:
static Comparator<Object> hashCodeOrder =
Comparator.comparingInt(o -> o.hashCode());
Comparator.comparingInt
λ₯Ό μ¬μ©νμ¬ λμ± κ°κ²°νκ² κ΅¬ννλ€.
compareTo
λ©μλμμ νλλ₯Ό λΉκ΅ν λλ:- κΈ°λ³Έ νμ
νλλ ν΄λΉ λ°μ± ν΄λμ€μ μ μ
compare
λ©μλλ₯Ό μ¬μ© - κ°μ²΄ μ°Έμ‘° νλλ ν΄λΉ νλμ
compareTo
λ©μλλ₯Ό μ¬κ·μ μΌλ‘ νΈμΆνλ€. Comparable
μ ꡬννμ§ μμ νλλ μ μ νComparator
λ₯Ό μ¬μ©νλ€.
- κΈ°λ³Έ νμ
νλλ ν΄λΉ λ°μ± ν΄λμ€μ μ μ
- νλμ λΉκ΅ μμλ μ€μλμ λ°λΌ μ νκΈ°
- κ°μ₯ μ€μν νλλΆν° λΉκ΅νμ¬ μμκ° κ²°μ λλ©΄ μ¦μ λ°ν
Comparator
μμ± λ©μλλ₯Ό μ¬μ©νλ©΄ μ½λκ° κ°κ²°ν΄μ§- κ·Έλ¬λ μ±λ₯ μ νκ° μμ μ μμΌλ―λ‘ μν©μ λ§κ² μ ν
- κ°μ μ°¨μ΄λ₯Ό λ°ννλ λ°©μμ νΌν΄μΌ νλ€.
- μ€λ²νλ‘μ°, μΈλνλ‘μ° λ±μ λ¬Έμ λ₯Ό μΌμΌν¬ μ μλ€.
compareTo
λ©μλ ꡬν μ:- μ μ λΉκ΅μ μμ± λ©μλλ₯Ό νμ©νμ¬ κ°κ²°νκ³ λͺ νν μ½λλ₯Ό μμ±νλ€.
- νλμ μ€μλ μμμ λ°λΌ λΉκ΅λ₯Ό μ§ννλ€.
- νμ μΆλ‘ μ νκ³λ‘ μΈν΄ λλ€ ννμμμ νμ μ λͺ μν΄μΌ ν λκ° μμΌλ μ£Όμν΄μΌ νλ€.
- μμλ₯Ό κ³ λ €ν΄μΌ νλ κ° ν΄λμ€λ₯Ό μμ±νλ€λ©΄ κΌ Comparable μΈν°νμ΄μ€λ₯Ό ꡬννμ¬, κ·Έ μΈμ€ν΄μ€λ€μ μ½κ² μ λ ¬νκ³ , κ²μνκ³ , λΉκ΅ κΈ°λ₯μ μ 곡νλ 컬λ μ κ³Ό μ΄μ°λ¬ μ§λλ‘ ν΄μΌ νλ€.
- compareTo λ©μλμμ νλμ κ°μ λΉκ΅ν λ <μ > μ°μ°μλ μ°μ§ λ§μμΌ νλ€.
- κ·Έ λμ λ°μ±λ κΈ°λ³Έ νμ ν΄λμ€κ° μ 곡νλ μ μ compare λ©μλλ Comparator μΈν°νμ΄μ€κ° μ 곡νλ λΉκ΅μ μμ± λ©μλλ₯Ό μ¬μ©νμ.
Footnotes
-
λΉκ΅ν λ νμ μ κ΄κ³μμ΄ μ¬μ©ν μ μμμ μλ―Έν©λλ€. μ¦, λ€μν νμ μ μ μ© κ°λ₯νλ€λ μλ―Έ β©
-
String
ν΄λμ€λComparable<String>
μΈν°νμ΄μ€λ₯Ό ꡬννκ³ μμΌλ©°, μ΄λ‘ μΈν΄compareTo
λ©μλλ₯Ό μ¬μ©νμ¬ λ¬Έμμ΄μ μ¬μ μ(μνλ²³ μμ)μΌλ‘ λΉκ΅ν μ μλ€.TreeSet
μ λ΄λΆμ μΌλ‘ μ½μ λ μμλ€μ μλμΌλ‘ μ λ ¬νλ μλ£κ΅¬μ‘°μ΄λ€. λ°λΌμTreeSet
μString
κ°μ²΄λ€μ μ½μ νλ©΄String
μcompareTo
λ©μλλ₯Ό κΈ°λ°μΌλ‘ μ¬μ μμΌλ‘ μ λ ¬ β©