โถ Comparable ์ธํฐํ์ด์ค์ Comparator ์ธํฐํ์ด์ค
Member ํด๋์ค๊ฐ ๊ฐ์ง ํ์ ์์ด๋๋ฅผ ๊ธฐ์ค์ผ๋ก ํ์ฌ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํ ๊ฒ์ธ๋ฐ, Comparable๊ณผ Comparator๋ ์ด๋ฌํ ์ ๋ ฌ์ ๊ตฌํํ ์ ์๊ฒ ํด์ฃผ๋ ์ธํฐํ์ด์ค์ด๋ค.
โ
โ
โ
*์๊ธฐ ์์ ๊ณผ ์ ๋ฌ๋ฐ์ ๋งค๊ฐ๋ณ์๋ฅผ ๋น๊ตํ๋ Comparable ์ธํฐํ์ด์ค
Comparable ์ธํฐํ์ด์ค์๋ compareTo( ) ์ถ์ ๋ฉ์๋๊ฐ ํฌํจ๋์ด ์๋ค.
package collection;
public class Member implements Comparable<Member> {
private int memberID;
private String memberName;
public Member(int memberID, String memberName) {
this.memberID = memberID;
this.memberName = memberName;
}
...
@Override
public int compareTo(Member member) { // compareTo() ๋ฉ์๋ ์ฌ์ ์. ์ถ๊ฐํ ํ์ ์์ด๋์ ๋งค๊ฐ๋ณ์๋ก ๋ฐ์ ํ์ ์์ด๋๋ฅผ ๋น๊ตํจ
return (this.memberID - member.memberID);
}
}
-compareTo( ) ์ ๋ฐํ ๊ฐ์ ์ ์ ๊ฐ์ด๋ค.
๋ ๊ฐ์ ๋น๊ตํ์ฌ ์๋ก ์ถ๊ฐํ ํ์ ์์ด๋๊ฐ ๋ ํฌ๋ฉด ์์, ๊ทธ๋ ์ง ์์ผ๋ฉด ์์, ๊ฐ์ผ๋ฉด 0์ ๋ฐํํ๋๋ก ๋ง๋ค์๋ค.
์ด๋ ๊ฒ ๊ตฌํํ๋ฉด ์ถ๋ ฅ ๊ฒฐ๊ณผ๋ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌ๋๋ค.
โ
โ
<์คํ ๊ฒฐ๊ณผ>
โ
โ
MemberID๋ฅผ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌํ๋ ค๋ฉด
@Override
public int compareTo(Member member) {
return (this.memberID - member.memberID) * (-1); // ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌํ๊ธฐ ์ํด ๋ฐํ ๊ฐ์ ์์๋ก ๋ง๋ฌ
}
์ด๋ ๊ฒ ํ๋ค.
โ
โ
โ
๋ ํผ์ ์ฝ๋ฉ) ํ์ ์ด๋ฆ์์ผ๋ก ์ ๋ ฌํ๊ธฐ
์ถ๋ ฅ ๊ฒฐ๊ณผ๊ฐ ํ์ ์ด๋ฆ์์ผ๋ก ์ ๋ ฌ๋๋๋ก compareTo( ) ๋ฉ์๋๋ฅผ ์์ ํ๋ผ.
โ
A)
@Override
public int compareTo(Member member) {
return this.memberName.compareTo(member.memberName);
}
-compareTo( ) ๋ฉ์๋ ์์ String ์ด ํฌํจ๋์ด์์.
โ
โ
โ
*๋ ๋งค๊ฐ๋ณ์๋ฅผ ๋น๊ตํ๋ Comparator ์ธํฐํ์ด์ค
Comparator ์ญ์ ์ ๋ ฌ์ ๊ตฌํํ๋ ๋ฐ ์ฌ์ฉํ๋ ์ธํฐํ์ด์ค์ด๋ค.
Comparator ์ธํฐํ์ด์ค๋ compare( ) ๋ฉ์๋๋ฅผ ๊ตฌํํด์ผ ํ๋ค.
์ผ๋ฐ์ ์ผ๋ก๋ Comparator ์ธํฐํ์ด์ค๋ณด๋ค๋ Comparable ์ธํฐํ์ด์ค๋ฅผ ๋ ๋ง์ด ์ฌ์ฉํ๋ค.
package collection;
import java.util.Comparator;
public class Member2 implements Comparable<Member> {
private int memberID;
private String memberName;
public Member2(int memberID, String memberName) {
this.memberID = memberID;
this.memberName = memberName;
}
...
@Override
public int compare(Member2 mem1, Member2 mem2) { // compare() ๋ฉ์๋ ์ฌ์ ์. ์ ๋ฌ๋ฐ์ ๋ ๋งค๊ฐ๋ณ์๋ฅผ ๋น๊ตํจ
return mem1.getMemberID() - mem2.getMemberID();
}
}
-Comparator๋ฅผ ์ฌ์ฉํ ๋ ์ ์ํ ์ ์ TreeSet ์์ฑ์์ Comparator๋ฅผ ๊ตฌํํ ๊ฐ์ฒด๋ฅผ ๋งค๊ฐ๋ณ์๋ก ์ ๋ฌํ๋ค๋ ๊ฒ์ด๋ค.
โ
package collection.treeset;
import java.util.Comparator;
import java.util.Set;
import java.util.TreeSet;
class MyCompare implements Comparator<String> {
@Override
public int compare(String s1, String s2) { // ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌ
return (s1.compareTo(s2) * -1);
}
}
public class ComparatorTest {
public static void main(String[] args) {
Set<String> set = new TreeSet<String>(new MyCompare()); // TreeSet ์์ฑ์์ ๋งค๊ฐ๋ณ์๋ก ์ ๋ ฌ ๋ฐฉ์์ ์ง์
set.add("aaa");
set.add("ccc");
set.add("bbb");
System.out.println(set);
}
}
-์ด๋ค ํด๋์ค๊ฐ ์ด๋ฏธ Comparable ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ๊ฒฝ์ฐ์ ์ด ํด๋์ค์ ์ ๋ ฌ ๋ฐฉ์์ ์ ์ํ ๋ Comparator ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ ์ ์๋ค. (String ํด๋์ค์ ๊ฒฝ์ฐ๋ final๋ก ์ ์ธ๋์ด ์์ด์ ์์๋ฐ์ compareTo( ) ๋ฉ์๋๋ฅผ ์ฌ์ ์ํ ์๋ ์๋ค)
'Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java-๊ธฐ์ด] ๋ด๋ถ ํด๋์ค (0) | 2021.02.22 |
---|---|
[Java-๊ธฐ์ด] Map ์ธํฐํ์ด์ค (0) | 2021.02.22 |
[Java-๊ธฐ์ด] set ์ธํฐํ์ด์ค (0) | 2021.02.22 |
[Java-๊ธฐ์ด] Iterator๋ฅผ ์ฌ์ฉํ์ฌ ์์๋ฅผ ์ํํ ๋ ์ฌ์ฉํ๋ ๋ฉ์๋ (0) | 2021.02.22 |
[Java-๊ธฐ์ด] ArrayList๋ก ์คํ๊ณผ ํ ๊ตฌํํ๊ธฐ (0) | 2021.02.21 |
๋๊ธ