์ถ์ฒ
ChatGPT
SortedMap์ ์๋ฐ์ Map ์ธํฐํ์ด์ค๋ฅผ ํ์ฅํ ์ธํฐํ์ด์ค๋ก, ์ ๋ ฌ๋ ํค-๊ฐ ์์ ์ ์ฅํ๋ ๋งต์ด๋ค. SortedMap์ ํค๋ฅผ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌ๋ ์ํ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์งํ๋ฉฐ, ์ฝ์ , ์ญ์ ๊ฒ์ ์ ํญ์ ์ด ์ ๋ ฌ ์ํ๊ฐ ์ ์ง๋๋ค.
1. SortedMap์ ์ฃผ์ ํน์ง
ํค ๊ธฐ๋ฐ ์ ๋ ฌ
SortedMap์ ํค๋ฅผ ๊ธฐ์ค์ผ๋ก ํญ์ ์ ๋ ฌ๋ ์ํ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ํค์ ์์ฐ ์์(Natural Ordering)์ ๋ฐ๋ผ ์ ๋ ฌ๋๋ฉฐ, Comparator๋ฅผ ์ ๊ณตํ๋ฉด ์ฌ์ฉ์ ์ ์ ์์๋ก ์ ๋ ฌํ ์ ์๋ค.
์ค๋ณต๋ ํค ๋ถํ
SortedMap์ ์ค๋ณต๋ ํค๋ฅผ ํ์ฉํ์ง ์์ผ๋ฉฐ, ๋์ผํ ํค๊ฐ ์ฝ์ ๋๋ฉด ๊ธฐ์กด ๊ฐ์ ๋ฎ์ด์ด๋ค.
null ํค ํ์ฉ ์ฌ๋ถ
SortedMap์ ๊ตฌํ์ฒด์ ๋ฐ๋ผ ๋ค๋ฅด์ง๋ง, ์ผ๋ฐ์ ์ผ๋ก null ํค๋ ํ์ฉ๋์ง ์๋๋ค. ์๋ฅผ ๋ค์ด, TreeMap์ null ํค๋ฅผ ํ์ฉํ์ง ์๋๋ค.
์ ๋ ฌ๋ ๋งต์ ๋ฒ์ ์กฐํ
SortedMap์ ํค์ ๋ฒ์๋ฅผ ์ง์ ํ์ฌ ํน์ ๋ฒ์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ฒ ์กฐํํ ์ ์๋ ๋ฉ์๋๋ฅผ ์ ๊ณตํ๋ค.
2. SortedMap์ ์ฃผ์ ๋ฉ์๋
SortedMap ์ธํฐํ์ด์ค๋ ๋ค์๊ณผ ๊ฐ์ ์ค์ํ ๋ฉ์๋๋ฅผ ์ ๊ณตํ๋ค.
1. ๋ฒ์ ์กฐํ ๋ฉ์๋
1. subMap(K fromKey, K toKey)
์ฃผ์ด์ง ๋ ํค ์ฌ์ด์ ๋ฒ์์ ํด๋นํ๋ ์๋ธ๋งต์ ๋ฐํํ๋ค. ์์ ํค๋ ํฌํจ๋๊ณ , ๋ ํค๋ ํฌํจ๋์ง ์๋๋ค.
2. headMap(K toKey)
์ฃผ์ด์ง ํค๋ณด๋ค ์์ ๋ชจ๋ ํค-๊ฐ ์์ ํฌํจํ๋ ์๋ธ๋งต์ ๋ฐํํ๋ค.
3. tailMap(K fromKey)
์ฃผ์ด์ง ํค๋ณด๋ค ํฐ ๋ชจ๋ ํค-๊ฐ ์์ ํฌํจํ๋ ์๋ธ๋งต์ ๋ฐํํ๋ค.
์ด ๋ฉ์๋๋ค์ ํน์ ๋ฒ์์ ์ํ ๋ฐ์ดํฐ๋ง์ ๊ฐ์ ธ์ ์์ ํ ๋ ๋งค์ฐ ์ ์ฉํ๋ค.
2. ์ ๋ ฌ๋ ๋งต์ ๊ธฐ๋ณธ ๋ฉ์๋
1. firstKey()
๋งต์์ ๊ฐ์ฅ ์์ ํค๋ฅผ ๋ฐํํ๋ค.
2. lastKey()
๋งต์์ ๊ฐ์ฅ ํฐ ํค๋ฅผ ๋ฐํํ๋ค.
์ด ๋ฉ์๋๋ค์ ๋งต์ ์ฒซ ๋ฒ์งธ ๋๋ ๋ง์ง๋ง ํค๋ฅผ ๋น ๋ฅด๊ฒ ์ฐพ์ ์ ์๊ฒ ํด์ค๋ค.
3. ์ ๋ ฌ ๊ธฐ์ค ์ ๊ณต ๋ฉ์๋
1. comparator()
๋งต์ด ์ฌ์ฉํ๋ Comparator๋ฅผ ๋ฐํํ๋ค. ๋ง์ฝ ๋งต์ด ๊ธฐ๋ณธ ์์ฐ ์์๋ฅผ ๋ฐ๋ฅด๋ ๊ฒฝ์ฐ, null์ ๋ฐํํ๋ค.
์ด ๋ฉ์๋๋ฅผ ํตํด SortedMap์ด ์ด๋ค ๊ธฐ์ค์ผ๋ก ํค๋ฅผ ์ ๋ ฌํ๋์ง ํ์ธํ ์ ์๋ค.
3. SortedMap์ ๊ตฌํํ ํด๋์ค
TreeMap
SortedMap์ ๋ํ์ ์ธ ๊ตฌํ์ฒผ๋ก, ๋ ๋-๋ธ๋ ํธ๋ฆฌ ๊ธฐ๋ฐ์ ์ด์ง ํ์ ํธ๋ฆฌ์ด๋ค. TreeMap์ ํญ์ ํค๋ฅผ ์ ๋ ฌ๋ ์ํ๋ก ์ ์งํ๋ฉฐ, SortedMap๊ณผ NavigableMap์ ๋ชจ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.
4. SortedMap์ ์ฃผ์ ๋ฉ์๋ ์ฌ์ฉ ์์
๋ค์์ TreeMap์ ์ฌ์ฉํด SortedMap์ ์ฃผ์ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ ๊ฐ๋จํ ์์์ด๋ค.
import java.util.*;
public class SortedMapExample {
public static void main(String[] args) {
// TreeMap์ ํตํด SortedMap ๊ตฌํ
SortedMap<String, Integer> sortedMap = new TreeMap<>();
// TreeMap์ ํค-๊ฐ ์ ์ถ๊ฐ
sortedMap.put("apple", 10);
sortedMap.put("banana", 20);
sortedMap.put("cherry", 30);
sortedMap.put("date", 40);
sortedMap.put("elderberry", 50);
// ์ฒซ ๋ฒ์งธ์ ๋ง์ง๋ง ํค
System.out.println("First key: " + sortedMap.firstKey());
System.out.println("Last key: " + sortedMap.lastKey());
// ํน์ ๋ฒ์์ ์๋ธ๋งต
SortedMap<String, Integer> subMap = sortedMap.subMap("banana", "date");
System.out.println("\nSubMap from 'banana' to 'date': " + subMap);
// headMap (์ฃผ์ด์ง ํค๋ณด๋ค ์์ ํค-๊ฐ ์๋ค)
SortedMap<String, Integer> headMap = sortedMap.headMap("cherry");
System.out.println("\nHeadMap up to 'cherry': " + headMap);
// tailMap (์ฃผ์ด์ง ํค๋ณด๋ค ํฐ ํค-๊ฐ ์๋ค)
SortedMap<String, Integer> tailMap = sortedMap.tailMap("cherry");
System.out.println("\nTailMap from 'cherry': " + tailMap);
}
}
์ถ๋ ฅ ๊ฒฐ๊ณผ
First key: apple
Last key: elderberry
SubMap from 'banana' to 'date': {banana=20, cherry=30}
HeadMap up to 'cherry': {apple=10, banana=20}
TailMap from 'cherry': {cherry=30, date=40, elderberry=50}
- firstKey()์ lastKey() : ๊ฐ์ฅ ์์ ํค์ ๊ฐ์ฅ ํฐ ํค๋ฅผ ๋ฐํํ๋ค.
- subMap() : ํน์ ํค์ ๋ฒ์์ ํด๋นํ๋ ์๋ธ๋งต์ ๋ฐํํ๋ค. ์ด ์์์์๋ "banana"์์ "date"๊น์ง์ ๋ฒ์๋ฅผ ์ง์ ํด ์๋ธ๋งต์ ๋ฐํํ๋ค. "data"๋ ํฌํจ๋์ง ์์๋ค.
- haedMap() : ์ฃผ์ด์ง ํค๋ณด๋ค ์์ ํค-๊ฐ ์์ผ๋ก ์ด๋ฃจ์ด์ง ๋งต์ ๋ฐํํ๋ค.
- tailMap() : ์ฃผ์ด์ง ํค๋ณด๋ค ํฐ ํค-๊ฐ ์์ผ๋ก ์ด๋ฃจ์ด์ง ๋งต์ ๋ฐํํ๋ค.
5. SortedMap์ ํ์ฉ
SortedMap์ ์ ๋ ฌ๋ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๊ฑฐ๋ ๋ฒ์ ๊ธฐ๋ฐ ์กฐํ๊ฐ ํ์ํ ๊ฒฝ์ฐ์ ๋งค์ฐ ์ ์ฉํ๋ค. ํค๊ฐ ํญ์ ์ ๋ ฌ๋ ์ํ๋ก ์ ์ฅ๋๋ฏ๋ก, ๋ฐ์ดํฐ์ ์์๋ฅผ ๋ณด์ฅํด์ผ ํ๋ ์์ ์ ์ ํฉํ๋ค.
1. ๋ฒ์ ์กฐํ
์๋ฅผ ๋ค์ด, ๋ ์ง๋ฅผ ํค๋ก ์ฌ์ฉํ์ฌ ํน์ ๋ ์ง ๋ฒ์์ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๋ ๊ฒฝ์ฐ, SortedMap์ subMap(), headMap(), tailMap() ๋ฉ์๋๋ฅผ ์ฌ์ฉํด๋ฉด ์ฝ๊ฒ ๋ฒ์ ๊ธฐ๋ฐ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ ์ ์๋ค.
2. ์ต์/์ต๋ ๊ฐ ์ฒ๋ฆฌ
SortedMap์ ํญ์ ์ ๋ ฌ๋ ์ํ๋ฅผ ์ ์งํ๋ฏ๋ก, ๊ฐ์ฅ ์์ ๊ฐ ๋๋ ๊ฐ์ฅ ํฐ ๊ฐ์ ๋น ๋ฅด๊ฒ ์ฐพ์๋ผ ์ ์๋ค. firstKey()์ lastKey() ๋ฉ์๋๋ ์ต์๊ฐ๊ณผ ์ต๋๊ฐ์ ์ฒ๋ฆฌํ ๋ ์ ์ฉํ๋ค.
3. ์ด์ง ํ์ ๊ธฐ๋ฐ ์์
SortedMap์ ํค๋ฅผ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌ๋ ์ํ๋ฅผ ์ ์งํ๋ฏ๋ก, ์ด์ง ํ์๊ณผ ๊ฐ์ ์ฑ๋ฅ ์ต์ ํ ์์ ์๋ ์ ๋ฆฌํ๋ค. ํนํ ๋๊ท๋ชจ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃฐ ๋ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋ค.
6. SortedMap๊ณผ Map์ ์ฐจ์ด์
ํน์ง | Map | SortedMap |
์ ๋ ฌ | ํค์ ์์๊ฐ ์ ์ง๋์ง ์์ | ํค๊ฐ ํญ์ ์ ๋ ฌ๋ ์ํ๋ก ์ ์ง๋จ |
๋ฒ์ ๊ธฐ๋ฐ ์กฐํ | ์ ๊ณต๋์ง ์์ | subMap(), headMap(), tailMap() ๋ฉ์๋ ์ ๊ณต |
์ต์/์ต๋ ๊ฐ ์ฒ๋ฆฌ | firstKey()์ lastKey() ์์ | firstKey(), lastKey() ์ ๊ณต |
๊ธฐ๋ณธ ๊ตฌํ์ฑ | HashMap, Hashtable๋ฑ | TreeMap |
7. ์ ๋ ฌ ๊ธฐ์ค
SortedMap์ ํค์ ์์ฐ ์์์ ๋ฐ๋ผ ์ ๋ ฌ๋๊ฑฐ๋, ์ฌ์ฉ์ ์ ์ ์ ๋ ฌ ๊ธฐ์ค(Comparator)์ ์ ๊ณตํ์ฌ ์ ๋ ฌํ ์ ์๋ค.
1. ์์ฐ ์์
ํค๊ฐ Comparable์ ๊ตฌํํ ๊ฒฝ์ฐ, SortedMap์ ๊ธฐ๋ณธ์ ์ผ๋ก ์์ฐ ์์์ ๋ฐ๋ผ ์ ๋ ฌ์ด ๋๋ค. ์๋ฅผ ๋ค์ด, Integer, String, Double๊ณผ ๊ฐ์ ํ์ ์ Comparable ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๊ณ ์์ผ๋ฏ๋ก, ๊ธฐ๋ณธ์ ์ผ๋ก ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌ๋๋ค.
2. ์ฌ์ฉ์ ์ ์ ์ ๋ ฌ
์ฌ์ฉ์๊ฐ Comparator๋ฅผ ์ ๊ณตํ๋ฉด, ํด๋น ์ ๋ ฌ ๊ธฐ์ค์ ๋ฐ๋ผ ํค๋ฅผ ์ ๋ ฌํ ์ ์๋ค. ๋ค์์ Comparator๋ฅผ ์ฌ์ฉํ TreeMap์ ์์์ด๋ค.
import java.util.*;
public class CustomSortedMapExample {
public static void main(String[] args) {
// ํค๋ฅผ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌํ๋ Comparator๋ฅผ ๊ฐ์ง TreeMap ์์ฑ
Comparator<String> comparator = (s1, s2) -> s2.compareTo(s1);
SortedMap<String, Integer> sortedMap = new TreeMap<>(comparator);
// TreeMap์ ํค-๊ฐ ์ ์ถ๊ฐ
sortedMap.put("apple", 10);
sortedMap.put("banana", 20);
sortedMap.put("cherry", 30);
sortedMap.put("date", 40);
sortedMap.put("elderberry", 50);
// TreeMap ์ถ๋ ฅ (๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌ๋จ)
System.out.println("TreeMap with custom comparator: " + sortedMap);
}
}
์ถ๋ ฅ ๊ฒฐ๊ณผ
TreeMap with custom comparator: {elderberry=50, date=40, cherry=30, banana=20, apple=10}
8. ๊ฒฐ๋ก
SortedMap์ ํค๋ฅผ ๊ธฐ์ค์ผ๋ก ํญ์ ์ ๋ ฌ๋ ์ํ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์งํ๋ ๋งต ์ธํฐํ์ด์ค์ด๋ค. TreeMap์ด ๊ทธ ๋ํ์ ์ธ ๊ตฌํ์ฒด์ด๋ฉฐ, ์์ฐ ์์ ๋๋ ์ฌ์ฉ์ ์ ์ ์ ๋ ฌ ๊ธฐ์ค์ ๋ฐ๋ผ ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฌํ ์ ์๋ค. ๋ํ SortedMap์ ๋ฒ์ ์กฐํ์ ๊ฐ์ ๊ณ ๊ธ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ฌ, ๋๊ท๋ชจ ๋ฐ์ดํฐ๋ฅผ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์๋๋ก ๋๋๋ค.
'๋น ๊ตฌ๋ฉ ์ฑ์ฐ๊ธฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java] NavigableMap (0) | 2024.09.14 |
---|---|
[Java] ์์ฐ ์์ Natural Ordering (0) | 2024.09.11 |
[Java] HashMap ๊ตฌํ (0) | 2024.09.11 |
[Java] Hashtable์ Enumeration ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๋ค. (0) | 2024.09.11 |
[Java] Fail-fast ๋ฉ์ปค๋์ฆ (0) | 2024.09.11 |