์ด๋ ๋ ๋ํ์์ ๊ฐ์ธ ๋ฐ์ดํฐ์ ํค ์ญํ ์ ํ๋ ๋๊ธ์์ ์ฑ์ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํ๋ ์ฝ๋๋ฅผ ์์ฑํด์ผ ํ์ต๋๋ค. ๋๋ ์ด๊ฒ์ ๋ง์ ์๊ฐ์ ๋ณด๋๋ค. ํ์ง๋ง ๊ทธ๋ TreeMap ํด๋์ค ์ ๋ํด ์์๋ค๋ฉด ํจ์ฌ ๋ ๋นจ๋ฆฌ ์์ ์ ์๋ฃํ์ ๊ฒ์ ๋๋ค.
ํธ๋ฆฌ๋งต ์ด๋ ๋ฌด์์ ๋๊น ? ์์๋ฅผ ํค-๊ฐ ์์ผ๋ก ์ ์ฅํ๊ณ ํค๋ณ๋ก ์ ๋ ฌํ๋ ์ฌ์ ๊ณผ ์ ์ฌํ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ๋๋ค.
์ด๋์์ ์ด๋ป๊ฒ ์ฌ์ฉํ ์ ์์ต๋๊น? ๊ธ์์, ๊ฐ์ ๋ฐ ์น๊ตฌ์ ์ฑ์ ๊ฐ์ง ๋์ผํ ๊ณผ์ ์ ์ด์์ ์ด์์ ๊ฒ์ ๋๋ค. ๊ฐ์ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ์ฅํด์ผ ํ๋ ๊ฒฝ์ฐ ์์ฒด ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ ์์ฑํ๋ ๋์ TreeMap์ ๋ง๋ค๊ณ ๊ทธ ์์ ๊ฐ์ ์ ๋ ฅํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค.
Integer ๋ฐ String ๊ณผ ๊ฐ์ ์ ํ์ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํฉ๋๋ค. ๊ทธ๋ฌ๋ TreeMap ์ ์ฌ์ฉ์ ์ ์ ์ ํ์ ๋ฃ์ผ๋ ค๋ฉด ํด๋์ค ์ธ์คํด์ค๋ฅผ ์ ๋ ฌํ๋ ๋ฐฉ๋ฒ์ ๋ํ๋ด๋ compareTo() ๋ฉ์๋ ๋ฅผ ๊ตฌํํ๋๋ก ํด๋์ค์์ Comparable ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํด์ผ ํฉ๋๋ค.
public class Person implements Comparable<Person> {
private String firstName;
private String lastName;
public Person(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
โฆ
@Override
public int compareTo(Person person) {
return person.getFirstName().compareTo(firstName);
}
@Override
public String toString() {
return "Person{" +
"firstName='" + firstName + '\'' +
", lastName='" + lastName + '\'' +
'}';
}
}
compareTo() ๋ฉ์๋๋ฅผ ์ฌ์ ์ํ์ฌ ์ํ๋ฒณ ์ญ์์ผ๋ก ์ด๋ฆ์ ๊ธฐ์ค์ผ๋ก ๊ฐ์ ์ ๋ ฌํฉ๋๋ค.
TreeMap map = new TreeMap<Person, String>();
map.put(new Person("AA","BB"), "aa");
map.put(new Person("BB","BB"), "aa");
map.put(new Person("DD","BB"), "aa");
map.put(new Person("CC","BB"), "aa");
๊ฐ์ ๋ค์ ์์๋ก ์ ์ฅ๋ฉ๋๋ค.
Person{firstName='DD', lastName='BB'}
Person{firstName='CC', lastName='BB'}
Person{firstName='BB', lastName='BB'}
Person{firstName='AA', lastName='BB'}
TreeMap ํด๋์ค๋ NavigableMap ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ฉฐ , ์ด๋ SortedMap ์ธํฐํ์ด์ค ๋ฅผ ํ์ฅํฉ๋๋ค . ์ด๋ฅผ ํตํด TreeMap ํด๋์ค๋ ํธ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ ๋ ฌ๋ ์์๋ก ๊ฐ์ ์ ์ฅํ ์ ์์ต๋๋ค.
Wikipedia์์ ๋งํ๋ฏ์ด ํธ๋ฆฌ๋ ๋จผ์ ๊ฐ์ ๋น๊ตํ ํ ๋ ธ๋์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ์์ฒด ๊ท ํ ์ด์ง ๊ฒ์ ๊ตฌ์กฐ์ ๋๋ค. |
๊ฐ๋จํ ๋งํด์ ๋ ๋-๋ธ๋ ํธ๋ฆฌ๋ ๊ฐ์ด ๋ฃจํธ๋ณด๋ค ํฌ๋ฉด ์ค๋ฅธ์ชฝ ํ์ ํธ๋ฆฌ์ ๊ฐ์ด ์ ์ผ๋ฉด ์ผ์ชฝ ํ์ ํธ๋ฆฌ์ ๊ฐ์ ์ ์ฅํ๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ๋๋ค. ์ด ๊ตฌํ์ ๊ตฌ์กฐ์ ๊ฐ์ ๋งค์ฐ ๋น ๋ฅด๊ฒ ์กฐํํ ์ ์์ต๋๋ค.
๋ ๋-๋ธ๋ ํธ๋ฆฌ๋ ์์ฒด์ ์ผ๋ก ๊ท ํ์ ์ด๋ฃจ๊ณ ์์ผ๋ฏ๋ก ๊ฐ๊ฐ์ ์ ๊ฐ์ด ์ฝ์ ๋ ๋๋ง๋ค ๊ตฌ์กฐ๊ฐ ๋ณ๊ฒฝ๋ฉ๋๋ค. ๋จผ์ ์ถ๊ฐ๋ ๊ฐ์ด ์ฒ์์๋ ๋ฃจํธ๋ก ๊ฐ์ฃผ๋์ง๋ง ๊ท ํ ์กฐ์ ๊ณผ์ ์์ ๋ค๋ฅธ ๊ฐ์ด ๋ฃจํธ๊ฐ ๋ ์ ์์ต๋๋ค.

์, ์ด์ TreeMap ์ด ๋ฌด์์ด๊ณ ์ด๋ป๊ฒ ์๋ํ๋์ง ์์์ต๋๋ค .
TreeMap์ Comparable ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๊ณ compareTo() ๋ฉ์๋๋ฅผ ์ฌ์ ์ ํ๋ ํด๋์ค์ ๊ฐ์ฒด๋ง ์ ์ฅํ ์ ์์ ์ ๊ธฐ์ตํ์ญ์์ค .
ํ์ง๋ง ๋ค์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ๋ก๋๋ ํ์ฌ ํด๋์ค๋ฅผ ์ฌ์ฉํ๊ณ ์๊ณ ๊ทธ ์์ Comparable์ ๊ตฌํํ ์ ์๋ค๋ฉด ์ด๋ป๊ฒ ๋ ๊น์? ์ด์ ๋ํ ํด๊ฒฐ์ฑ ์ด ์์ต๋๋ค. ์์ ์ Comparator ๋ฅผ ์์ฑํ์ญ์์ค .
Comparator ๋ compare() ๋ฉ์๋๊ฐ ์๋ ์ธํฐํ์ด์ค์ ๋๋ค. ์ด๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ฒด๋ฅผ ๋น๊ตํ๊ณ TreeMap ์ ์ ์ฅํ ์ ์์ต๋๋ค .
Comparator<Person> comparator = new Comparator<Person>() {
@Override
public int compare(Person person1, Person person2) {
return person1.getFirstName().compareTo(person2.getFirstName());
}
};
TreeMap map = new TreeMap<Person, String>(comparator);
์ด ์์ ์์๋ ์ฌ์ฉ์ ์ง์ Comparator๋ฅผ ๋ง๋ค๊ณ TreeMap ์ ํด๋์ค์ ์ ๋ฌํ์ต๋๋ค .
Java 8๋ถํฐ ๋๋ค ์์ ์ฌ์ฉํ์ฌ ์์ฑํ ์ ์์ต๋๋ค.
TreeMap map = new TreeMap<Person, String>((Person person1, Person person2) -> person1.getFirstName().compareTo(person2.getFirstName()));
์ฆ, TreeMap ์ ๊ฐ์ ์ ์ฅํ๋ ค๋ฉด ์ ๋ ฌ ๋ฐฉ๋ฒ์ ์ง์ ํด์ผ ํฉ๋๋ค. ์ด๋ฅผ ์ํํ๋ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ด ์์ต๋๋ค. Comparable์ ๊ตฌํํ๊ฑฐ๋ ์์ ์ Comparator๋ฅผ ๊ตฌํํฉ๋๋ค .
ํ์ง๋ง null์ TreeMap ์ ํค๋ก ๋ฃ์ด์ผ ํ๋ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํ ๊น์ ? HashMap์ ์ฌ์ฉ ํ๋ฉด ์ด ์์ ์ ์ํํ ์ ์์ต๋๋ค. ์, ํ์ง๋ง TreeMap์ ์ด๋ฅผ ์ด๋ป๊ฒ ์ฒ๋ฆฌํฉ๋๊น?
TreeMap map = new TreeMap<Person, String>();
map.put (null, "Person");
์ด ์ฝ๋๋ฅผ ์คํํ๋ฉด ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
๋ฌธ์ ๋ ๋ด๋ถ์ ์ผ๋ก TreeMap ํด๋์ค๊ฐ compareTo() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ ๋น๊ตํ๋ค๋ ๊ฒ์ ๋๋ค . ํ์คํ null ๊ฐ์ ์ ๋ฌํ ์ ์์ผ๋ฉฐ ์ฝ๋๊ฐ ์ปดํ์ผ๋ฉ๋๋ค. ๊ทธ๋ฌ๋ ๋ฐํ์์ ๋ฉ์๋๊ฐ null ๊ฐ ์์ ํธ์ถ๋์ด NullPointerException์ด ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
HashMap๊ณผ TreeMap์ ๋น๊ต
TreeMap ๊ณผ ๋ฌ๋ฆฌ HashMap์์๋ null ์ ํค๋ก ์ ์ฅํ ์ ์์ต๋๋ค . ๊ตฌ์กฐ์๋ ๋ชจ๋ null ํค์ ๋ํ ํน์ ์์น๊ฐ ์์ต๋๋ค. HashMap์ ํด์ ๊ฐ์ ๊ธฐ๋ฐ์ผ๋ก ์ด๋ํ๋ ์์น๋ฅผ ๊ฒฐ์ ํ๊ณ ๋น๊ต๊ฐ ํ์ํ์ง ์์ ํด์ ๊ฐ์ ๊ณ์ฐํ๊ธฐ ๋๋ฌธ์ null ํค๋ฅผ ์ ์ฅํ ์ ์์ต๋๋ค . ๋ฐ๋ผ์ ๋ชจ๋ null ํค์๋ ์ ์๋ฆฌ๊ฐ ์์ต๋๋ค.
์ด์ ๊ฐ์ ์ ๋ ฌ๋ ์์๋ก ์ ์ฅํด์ผ ํ ๋ ๋ฌด์์ ์ฌ์ฉํด์ผ ํ๋์ง, ์ ๋ ฌ ๊ท์น์ ์ค์ ํ๋ ๋ฐฉ๋ฒ์ ์๊ฒ ๋์์ต๋๋ค.
GO TO FULL VERSION