Arrays (Java SE 11 & JDK 11 )
Compares two int arrays lexicographically over the specified ranges. If the two arrays, over the specified ranges, share a common prefix then the lexicographic comparison is the result of comparing two elements, as if by Integer.compare(int, int), at a rel
docs.oracle.com
๐JavaDocs(๋ฒ์ญ)
public static <T> void sortโ(T[] a, Comparator<? super T> c)
(๋ฐํ ํ์ ์์ ์๋ `<T>`๋ ๋ฉ์๋๊ฐ ์ ๋ค๋ฆญ ํ์ ์ ์ฌ์ฉํ๋ค๋ ๊ฒ์ ๋ช ์ํ๋ค.)
์ง์ ๋ ๋ฐฐ์ด์ ๊ฐ์ฒด๋ค์ ์ง์ ๋ ๋น๊ต ๊ธฐ์ค์ ๋ฐ๋ผ ์ ๋ ฌํฉ๋๋ค. ๋ฐฐ์ด ๋ด์ ๋ชจ๋ ์์๋ ์ง์ ๋ ๋น๊ต ๊ธฐ์ค์ ์ํด ์ํธ ๋น๊ต ๊ฐ๋ฅํด์ผ ํฉ๋๋ค (์ฆ, ๋ฐฐ์ด์ ๋ชจ๋ ์์ `e1`๊ณผ `e2`์ ๋ํด `c.compare(e1, e2)`๊ฐ `ClassCastException`์ ๋์ง์ง ์์์ผ ํฉ๋๋ค). ์ด ์ ๋ ฌ์ ์์ ์ ์ธ ์ ๋ ฌ์์ด ๋ณด์ฅ๋ฉ๋๋ค: ๋์ผํ ์์๋ค์ ์ ๋ ฌ ๊ฒฐ๊ณผ๋ก ์ฌ๋ฐฐ์ด๋์ง ์์ต๋๋ค.
๊ตฌํ ์ฐธ๊ณ ์ฌํญ: ์ด ๊ตฌํ์ ์์ ์ ์ด๊ณ ์ ์์ ์ธ ๋ฐ๋ณต์ ๋ณํฉ ์ ๋ ฌ(`mergesort`)๋ก, ์ ๋ ฅ ๋ฐฐ์ด์ด ๋ถ๋ถ์ ์ผ๋ก ์ ๋ ฌ๋ ๊ฒฝ์ฐ `n * log(n)`๋ณด๋ค ํจ์ฌ ์ ์ ๋น๊ต๋ฅผ ์๊ตฌํ๋ฉฐ, ์ ๋ ฅ ๋ฐฐ์ด์ด ๋ฌด์์๋ก ์ ๋ ฌ๋ ๊ฒฝ์ฐ ์ ํต์ ์ธ ๋ณํฉ ์ ๋ ฌ๊ณผ ๋์ผํ ์ฑ๋ฅ์ ์ ๊ณตํฉ๋๋ค. ์ ๋ ฅ ๋ฐฐ์ด์ด ๊ฑฐ์ ์ ๋ ฌ๋ ๊ฒฝ์ฐ, ์ด ๊ตฌํ์ ์ฝ `n`๋ฒ์ ๋น๊ต๋ง์ ํ์๋ก ํฉ๋๋ค. ์์ ์ ์ฅ์ ์๊ตฌ์ฌํญ์ ๊ฑฐ์ ์ ๋ ฌ๋ ์ ๋ ฅ ๋ฐฐ์ด์ ๊ฒฝ์ฐ ์์ ์์์์ ๋ฌด์์๋ก ์ ๋ ฌ๋ ์ ๋ ฅ ๋ฐฐ์ด์ ๊ฒฝ์ฐ `n/2`๊ฐ์ ๊ฐ์ฒด ์ฐธ์กฐ๊น์ง ๋ค์ํฉ๋๋ค.
์ด ๊ตฌํ์ ์ ๋ ฅ ๋ฐฐ์ด์์ ์ค๋ฆ์ฐจ์ ๋ฐ ๋ด๋ฆผ์ฐจ์ ์์ ๋ชจ๋๋ฅผ ๋๋ฑํ๊ฒ ํ์ฉํ๋ฉฐ, ๋์ผํ ์ ๋ ฅ ๋ฐฐ์ด์ ๋ค๋ฅธ ๋ถ๋ถ์์ ์ค๋ฆ์ฐจ์ ๋ฐ ๋ด๋ฆผ์ฐจ์ ์์๋ฅผ ํ์ฉํ ์ ์์ต๋๋ค. ์ด ๊ตฌํ์ ๋ ๊ฐ ์ด์์ ์ ๋ ฌ๋ ๋ฐฐ์ด์ ๋ณํฉํ๋ ๋ฐ ๋งค์ฐ ์ ํฉํฉ๋๋ค: ๋จ์ํ ๋ฐฐ์ด์ ์ฐ๊ฒฐํ ํ ๊ฒฐ๊ณผ ๋ฐฐ์ด์ ์ ๋ ฌํ๋ฉด ๋ฉ๋๋ค.
๋งค๊ฐ๋ณ์
- `a`: ์ ๋ ฌํ ๋ฐฐ์ด
- `c`: ๋ฐฐ์ด์ ์์๋ฅผ ๊ฒฐ์ ํ๋ ๋น๊ต ๊ธฐ์ค. `null` ๊ฐ์ด ์ ๋ฌ๋๋ฉด ์์๋ค์ ์์ฐ ์์๋ฅผ ์ฌ์ฉํฉ๋๋ค.
์์ธ ์ฒ๋ฆฌ
- `ClassCastException`: ๋ฐฐ์ด์ ์ง์ ๋ ๋น๊ต ๊ธฐ์ค์ผ๋ก ์ํธ ๋น๊ตํ ์ ์๋ ์์๊ฐ ํฌํจ๋ ๊ฒฝ์ฐ ๋ฐ์ํฉ๋๋ค.
- `IllegalArgumentException`: (์ ํ์ ) ๋น๊ต ๊ธฐ์ค์ด `Comparator` ๊ณ์ฝ์ ์๋ฐํ ๊ฒ์ผ๋ก ํ์ธ๋๋ฉด ๋ฐ์ํฉ๋๋ค.
1๏ธโฃ ๊ธฐ๋ณธ ์ ๋ ฌ
ํ๋ผ๋ฏธํฐ๋ก ๋ฐฐ์ด๋ง ์ ๋ฌํ๋ ๊ฒฝ์ฐ, ๊ธฐ๋ณธ์ ์ผ๋ก ์ฌ์ ์์ผ๋ก ์ ๋ ฌ๋๋ค.
Arrays.sort(strArr);
2๏ธโฃ 'Comparator'๋ฅผ ์ฌ์ฉํ ์ ๋ ฌ
`Comparator` ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ์ฌ ๋ช ์์ ์ผ๋ก ์ ๋ ฌ ์์๋ฅผ ์ง์ ํ ์ ์๋ค.
- `naturalOrder()`์ `reverseOrder()` ๋ฉ์๋๋ฅผ ํตํด ๊ธฐ๋ณธ์ ์ธ ์ฌ์ ์ ๋ฐ ์ญ์ฌ์ ์ ์ ๋ ฌ์ด ๊ฐ๋ฅํ๋ค.
Arrays.sort(strArr, Comparator.naturalOrder()); // ์ฌ์ ์ ์ ๋ ฌ(์ค๋ฆ์ฐจ์, ๊ธฐ๋ณธ๊ฐ)
Arrays.sort(strArr, Comparator.reverseOrder()); // ์ญ์ฌ์ ์ ์ ๋ ฌ(๋ด๋ฆผ์ฐจ์)
- `comparing()` ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์ ๋ ฌ ๊ธฐ์ค์ ์ง์ ํ ์ ์๋ค.
Arrays.sort(strArr, Comparator.comparing(String::length)); // ๋ฌธ์์ด ๊ธธ์ด์ ๋ฐ๋ฅธ ์ ๋ ฌ(์ค๋ฆ์ฐจ์)
Arrays.sort(strArr, Comparator.comparing(String::length).reversed()); // ๋ฌธ์์ด ๊ธธ์ด์ ๋ฐ๋ฅธ ์ ๋ ฌ(๋ด๋ฆผ์ฐจ์)
Arrays.sort(strArr, Comparator.comparing(s -> s.charAt(0))); // ์ฒซ ๋ฒ์งธ ๋ฌธ์์ ๋ฐ๋ฅธ ์ ๋ ฌ
- `thenComparingInt()` ๋ฉ์๋๋ฅผ ์ถ๊ฐ๋ก ์ฌ์ฉํ์ฌ ๋ค์ค ๊ธฐ์ค์ ๋ฐ๋ฅธ ์ ๋ ฌ๋ ๊ฐ๋ฅํ๋ค. โจ
Arrays.sort(strArr, Comparator.comparing(String::length)
.thenComparing(s -> s.charAt(0))
.thenComparing(Comparator.naturalOrder()));
// ๋ฌธ์์ด ๊ธธ์ด๋ก ๋จผ์ ์ ๋ ฌ, ๊ทธ ๋ค์ ์ฒซ ๋ฒ์งธ ๋ฌธ์๋ก ์ ๋ ฌ, ๋ง์ง๋ง์ผ๋ก ์ฌ์ ์ ์ ๋ ฌ
3๏ธโฃ ์ต๋ช ํด๋์ค๋ฅผ ์ฌ์ฉํ์ฌ 'Comparator ์ง์ ๊ตฌํ'
`Comparator` ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ์ต๋ช ํด๋์ค์์ `compare` ๋ฉ์๋๋ฅผ ์ฌ์ ์ํ์ฌ ์ ๋ ฌ ๊ธฐ์ค์ ์ง์ ํ๋ค.
- `a.compareTo(b)`๋ `String` ํด๋์ค์ ๋ฉ์๋๋ก, `a`๊ฐ `b`๋ณด๋ค ์ฌ์ ์์ผ๋ก ์์ ์์ผ๋ฉด ์์, ๊ฐ์ผ๋ฉด 0, ๋ค์ ์์ผ๋ฉด ์์๋ฅผ ๋ฐํํ๋ค.
Arrays.sort(strArr, new Comparator<String>() {
@Override
public int compare(String a, String b) {
return a.compareTo(b); // ์ฌ์ ์ ์ ๋ ฌ
}
});
4๏ธโฃ '๋๋ค์'์ ์ฌ์ฉํ์ฌ Comparator ๊ตฌํ ์ฝ๋ ๊ฐ๊ฒฐํ๊ฒ ์์ฑ
๋๋ค์์ ์ต๋ช ํด๋์ค๋ฅผ ๊ฐ๋จํ๊ฒ ํํํ ์ ์๋ ๋ฐฉ๋ฒ์ผ๋ก, ๋๋ค์์ ์ฌ์ฉํ์ฌ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ค๋ฉด ํด๋น ์ธํฐํ์ด์ค๊ฐ ๋จ์ผ ์ถ์ ๋ฉ์๋๋ฅผ ๊ฐ์ ธ์ผ ํ๋ค. (์ด๋ฅผ ํจ์ํ ์ธํฐํ์ด์ค ๋ผ๊ณ ํ๋ค.)
- `Comparator` ์ธํฐํ์ด์ค๋ ๋จ์ผ ์ถ์ ๋ฉ์๋์ธ `compare` ๋ฉ์๋๋ง์ ๊ฐ์ง๊ณ ์์ผ๋ฏ๋ก ๋๋ค์์ ์ฌ์ฉํ์ฌ ๊ตฌํ ์ฝ๋๋ฅผ ๊ฐ๊ฒฐํ๊ฒ ์์ฑํ ์ ์๋ค. โจ
Arrays.sort(strArr, (a, b) -> {
return a.compareTo(b);
});
- ๋๋ค์์ด ํ ์ค์ธ ๊ฒฝ์ฐ์๋ ์ค๊ดํธ `{}`์ `return` ํค์๋๋ฅผ ์๋ตํ ์ ์์ด ์ฝ๋๊ฐ ๋์ฑ ๊ฐ๊ฒฐํด์ง๋ค.
Arrays.sort(strArr, (a, b) -> a.compareTo(b));
5๏ธโฃ '๋ฉ์๋ ์ฐธ์กฐ'๋ฅผ ์ฌ์ฉํ์ฌ ๋๋ค์ ์ฝ๋ ๊ฐ๊ฒฐํ๊ฒ ์์ฑ
๋ฉ์๋ ์ฐธ์กฐ๋ ๋๋ค์์ ์ถ์ฝํ์ผ๋ก, ๋จ์ํ ๋ฉ์๋๋ฅผ ํธ์ถํ๋ ๊ฒฝ์ฐ์ ์ฌ์ฉํ ์ ์๋ค.
Arrays.sort(strArr, String::compareTo);
'โJava' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java] Map ์ฌ์ฉ ๋ฐฉ๋ฒ(keySet(), entrySet(), Map.entry()) (0) | 2024.09.01 |
---|---|
[Java] JPA, JPQL, QueryDSL ๊ฐ๋ ์ ๋ฆฌ (1) | 2024.08.22 |
[Spring Boot] Log4j2 ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก SQL ์ฟผ๋ฆฌ ๋ก๊น ์ค์ ํ๊ธฐ (0) | 2024.08.21 |
[๋ชฉ์ฐจ] Do it! ์๊ณ ๋ฆฌ์ฆ ์ฝ๋ฉ ํ ์คํธ ์๋ฐ ํธ (0) | 2024.08.16 |