์ถ์ฒ
ChatGPT
NavigableMap์ ์๋ฐ ์ปฌ๋ ์ ํ๋ ์์ํฌ์์ ์ ๋ ฌ๋ ํค-๊ฐ ์์ ์ ์ฅํ๊ณ , ์๋ฐฉํฅ ํ์ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ์ธํฐํ์ด์ค์ด๋ค. NavigableMap์ SortedMap ์ธํฐํ์ด์ค๋ฅผ ํ์ฅํ์ฌ, ์์ ๋๋ ํ์ ๊ฐ์ ์ฐพ๊ณ ์๋ธ๋งต์ ์์ฑํ๋ ๋ฑ, ๋ ๋ง์ ํ์ ๊ด๋ จ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.
1. NavigableMap์ ์ฃผ์ ํน์ง
์ ๋ ฌ๋ ๋งต
NavigableMap์ ํค๊ฐ ํญ์ ์ ๋ ฌ๋ ์์๋ก ์ ์ฅ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ์์ฐ ์์(Natural Ordering)์ ๋ฐ๋ผ ์ ๋ ฌ๋์ง๋ง, ์ฌ์ฉ์๊ฐ ์ ๊ณตํ Comparator๋ฅผ ํตํด ์ฌ์ฉ์ ์ ์ ์์๋ก ์ ๋ ฌํ ์๋ ์๋ค.
์๋ฐฉํฅ ํ์
NavigableMap์ ํค์ ๊ฐ์ ๊ธฐ์ค์ผ๋ก ์์ ๋๋ ํ์ ๋ฐฉํฅ์ผ๋ก ํ์ํ ์ ์๋ค. ์๋ฅผ ๋ค์ด, ๊ฐ์ฅ ๊ฐ๊น์ด ์์ ํค๋ ํ์ ํค๋ฅผ ์ฐพ๋ ๋ฉ์๋๋ฅผ ์ ๊ณตํ๋ค.
์๋ธ๋งต ์์ฑ
ํค์ ๋ฒ์๋ฅผ ์ง์ ํด ์๋ธ๋งต์ ์์ฑํ ์ ์๋ค. ์ด๋ฅผ ํตํด ํน์ ๊ตฌ๊ฐ์ ์ํ ํค-๊ฐ ์๋ค๋ง์ ํฌํจํ๋ ๋ถ๋ถ ๋งต์ ์ป์ ์ ์๋ค.
2. NavigableMap์ ๊ตฌํํ ํด๋์ค
TreeMap
NavigableMap ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ๋ํ์ ์ธ ํด๋์ค์ด๋ค. TreeMap์ ๋ด๋ถ์ ์ผ๋ก ๋ ๋-๋ธ๋ ํธ๋ฆฌ๋ฅผ ์ฌ์ฉํด ์ ๋ ฌ๋ ๋งต์ ๊ตฌํํ๋ค.
3. NavigableMap์ ์ฃผ์ ๋ฉ์๋
1. ๋ฒ์ ํ์ ๋ฉ์๋
lowerEntry(K key)
์ฃผ์ด์ง ํค๋ณด๋ค ์์, ๊ฐ์ฅ ํฐ ํค-๊ฐ ์์ ๋ฐํํ๋ค. ํค๊ฐ ์๋ค๋ฉด null์ ๋ฐํํ๋ค.
floorEntry(K key)
์ฃผ์ด์ง ํค์ ๊ฐ์ ๊ฐ์ด๊ฑฐ๋, ์์ ํค-๊ฐ ์๋ค ์ค ๊ฐ์ฅ ํฐ ๊ฐ์ ๋ฐํํ๋ค.
ceilingEntry(K key)
์ฃผ์ด์ง ํค๋ณด๋ค ๊ฐ์ ๊ฐ์ด๊ฑฐ๋, ํฐ ํค-๊ฐ ์๋ค ์ค ๊ฐ์ฅ ์์ ๊ฐ์ ๋ฐํํ๋ค.
highterEntry(K key)
์ฃผ์ด์ง ํค๋ณด๋ค ์์ ํค-๊ฐ ์์ ๋ฐํํ๋ค.
์ด ๋ฉ์๋๋ค์ ์๋ฐฉํฅ ํ์์ ์ง์ํ๋ ์ฃผ์ ๋ฉ์๋๋ค๋ก, ํน์ ํค์ ๋ํด ์์ ๋๋ ํ์ ๋ฐฉํฅ์ผ๋ก ๊ฐ์ฅ ๊ฐ๊น์ด ํค๋ฅผ ์ฐพ๋ ๋ฐ ์ฌ์ฉ๋๋ค.
2. ์๋ธ๋งต ๋ฉ์๋
subMap(K fromKey, boolean fromInclusive, K toKey, boolean toInclusiive)
์ฃผ์ด์ง ๋ฒ์ ์์ ํฌํจ๋ ํค-๊ฐ ์์ผ๋ก ์ด๋ฃจ์ด์ง ์๋ธ๋งต์ ๋ฐํํ๋ค.
headMap(K toKey, boolean inclusive)
์ฃผ์ด์ง ํค๋ณด๋ค ์์ ํค-๊ฐ ์์ ํฌํจํ๋ ์๋ธ๋งต์ ๋ฐํํ๋ค.
tailMap(K fromKey, boolean inclusive)
์ฃผ์ด์ง ํค๋ณด๋ค ํฐ ํค-๊ฐ ์์ ํฌํจํ๋ ์๋ธ๋งต์ ๋ฐํํ๋ค.
์๋ธ๋งต ๋ฉ์๋๋ ํน์ ๋ฒ์์ ์ํ ์์๋ค๋ง์ ๊ฐ์ ธ์ค๋ ๋ฐ ์ ์ฉํ๋ค. ์ด ๋ฉ์๋๋ค์ ๋ฒ์ ๊ธฐ๋ฐ ์กฐํ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํ๋ค.
3. ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ ๋ฉ์๋
descendingMap()
๋งต์ ํค-๊ฐ ์์ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌํ ์๋ก์ด ๋งต์ ๋ฐํํ๋ค.
descendingKeySet()
ํค๋ง ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌํ navigableSet์ ๋ฐํํ๋ค.
descendingMap()์ ์ฌ์ฉํ๋ฉด NavigalbeMap์ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌ๋ ์๋ก์ด ๋งต์ผ๋ก ๋ณํํ ์ ์๋ค. ์๋์ ๋งต์๋ ์ํฅ์ ๋ฏธ์น์ง ์๊ณ , ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ํํ ์ ์๋ค.
4. ๊ธฐํ ๋ฉ์๋
pollFirstEntry()
๋งต์ ์ฒซ ๋ฒ์งธ(๊ฐ์ฅ ์์ ํค-๊ฐ ์)๋ฅผ ์ ๊ฑฐํ๊ณ ๋ฐํํ๋ค.
pollLastEntry()
๋งต์ ๋ง์ง๋ง(๊ฐ์ฅ ํฐ ํค-๊ฐ ์)์ ์ ๊ฑฐํ๊ณ ๋ฐํํ๋ค.
์ด ๋ฉ์๋๋ค์ ๊ฐ์ฅ ์๊ฑฐ๋ ๊ฐ์ฅ ํฐ ์์๋ฅผ ์ ๊ฑฐํ๋ ๋ฐ ์ฌ์ฉ๋๋ค. ์ด๋ ํ์ ์์ ์ฒ๋ผ ๋์ํ๋ฉฐ, ์ ๊ฑฐ๋ ํค-๊ฐ ์์ ๋ฐํํ๋ค.
4. NavigableMap์ ์ฃผ์ ๋ฉ์๋ ์ฌ์ฉ ์์
๋ค์์ TreeMap์ ์ฌ์ฉํด NavigableMap์ ์ฃผ์ ๋ฉ์๋๋ค์ ์ฌ์ฉํ๋ ์์์ด๋ค.
import java.util.*;
public class NavigableMapExample {
public static void main(String[] args) {
NavigableMap<String, Integer> treeMap = new TreeMap<>();
// TreeMap์ ์์ ์ถ๊ฐ
treeMap.put("apple", 10);
treeMap.put("banana", 20);
treeMap.put("cherry", 30);
treeMap.put("date", 40);
treeMap.put("elderberry", 50);
// ์์/ํ์ ํ์ ๋ฉ์๋ ์์
System.out.println("Lower entry than 'cherry': " + treeMap.lowerEntry("cherry"));
System.out.println("Floor entry for 'cherry': " + treeMap.floorEntry("cherry"));
System.out.println("Ceiling entry for 'cherry': " + treeMap.ceilingEntry("cherry"));
System.out.println("Higher entry than 'cherry': " + treeMap.higherEntry("cherry"));
// ์๋ธ๋งต ์์
NavigableMap<String, Integer> subMap = treeMap.subMap("banana", true, "date", true);
System.out.println("\nSubMap from 'banana' to 'date': " + subMap);
// ๋ด๋ฆผ์ฐจ์ ๋งต ์์
NavigableMap<String, Integer> descendingMap = treeMap.descendingMap();
System.out.println("\nDescending Map: " + descendingMap);
// ์ฒซ ๋ฒ์งธ์ ๋ง์ง๋ง ์์ ์ ๊ฑฐ
Map.Entry<String, Integer> firstEntry = treeMap.pollFirstEntry();
System.out.println("\nFirst entry removed: " + firstEntry);
Map.Entry<String, Integer> lastEntry = treeMap.pollLastEntry();
System.out.println("Last entry removed: " + lastEntry);
// ํ์ฌ TreeMap ์ํ
System.out.println("\nCurrent TreeMap: " + treeMap);
}
}
์ถ๋ ฅ ๊ฒฐ๊ณผ
Lower entry than 'cherry': banana=20
Floor entry for 'cherry': cherry=30
Ceiling entry for 'cherry': cherry=30
Higher entry than 'cherry': date=40
SubMap from 'banana' to 'date': {banana=20, cherry=30, date=40}
Descending Map: {elderberry=50, date=40, cherry=30, banana=20, apple=10}
First entry removed: apple=10
Last entry removed: elderberry=50
Current TreeMap: {banana=20, cherry=30, date=40}
5. NavigableMap์ ํ์๊ณผ ์๋ธ๋งต ๊ธฐ๋ฅ
NavigableMap์ ๊ฐ์ฅ ํฐ ์ฅ์ ์ ์๋ฐฉํฅ ํ์๊ณผ ์๋ธ๋งต ๊ธฐ๋ฅ์ด๋ค.
- ์๋ฐฉํฅ ํ์์ ์์ ๋๋ ํ์ ํค๋ฅผ ์ฐพ๊ณ , ๋ฒ์๋ฅผ ์ค์ ํด ์กฐํํ๋ ๋ฐ ๋งค์ฐ ์ ์ฉํ๋ค. ์๋ฅผ ๋ค์ด, ํน์ ํค๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ๊ฐ, ํน์ ํฐ ๊ฐ๋ค์ ์ฝ๊ฒ ์ฐพ์ ์ ์๋ค.
- ์๋ธ๋งต ๊ธฐ๋ฅ์ ํน์ ๋ฒ์์ ํด๋นํ๋ ํค-๊ฐ ์๋ค์ ์ฝ๊ฒ ์ถ์ถํ ์ ์์ผ๋ฉฐ, ์ด๋ฅผ ํตํด ๋ฒ์ ๊ธฐ๋ฐ ์กฐํ๋ ์์ ์ ํจ์จ์ ์ผ๋ก ์ํํ ์ ์๋ค.
6. NavigableMap์ ํ์ฉํ๋ ๊ฒฝ์ฐ
1. ๋ฒ์ ๊ธฐ๋ฐ ํ์
NavigableMap์ ํค ๊ฐ์ ๋ฒ์๊ฐ ์ค์ํ ๊ฒฝ์ฐ์ ์ ์ฉํ๋ค. ์๋ฅผ ๋ค์ด, ๋ ์ง๋ฅผ ํค๋ก ์ฌ์ฉํด ์ผ์ ๋ฒ์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ๋ฑ์ ์์ ์ ์ ํฉํ๋ค.
2. ์ ๋ ฌ๋ ๋ฐ์ดํฐ ๊ด๋ฆฌ
ํค๊ฐ ํญ์ ์ ๋ ฌ๋ ์ํ๋ฅผ ์ ์งํด์ผ ํ๋ ๊ฒฝ์ฐ์ ์ ์ฉํ๋ค. ์ด๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฌ๋ ์์๋ก ์กฐํํ๊ฑฐ๋ ํน์ ๊ตฌ๊ฐ์ ๋ฐ์ดํฐ๋ง ํจ์จ์ ์ผ๋ก ๋ค๋ฃฐ ์ ์๋ค.
3. ์ฐ์ ์์ ๊ธฐ๋ฐ ๋ฐ์ดํฐ ๊ด๋ฆฌ
๋ด๋ฆผ์ฐจ์ ๋๋ ํน์ ์์๋ฅผ ์ ์งํ๋ฉฐ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๋ ๋ฐ ์ ์ฉํ๋ค. ์๋ฅผ ๋ค์ด, ์ฐ์ ์์๊ฐ ๋์ ์์ ์ ๋จผ์ ์ฒ๋ฆฌํ๋ ํ๋ก ์ฌ์ฉํ ์ ์๋ค.
7. NavigableMap๊ณผ SortedMap์ ์ฐจ์ด์
NavigableMap์ SortedMap์ ํ์ฅํ์ผ๋ก, ์ถ๊ฐ์ ์ธ ํ์ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค. SortedMap์ ๊ธฐ๋ณธ์ ์ธ ์ ๋ ฌ๊ณผ ์๋ธ๋งต ๊ธฐ๋ฅ์ ์ ๊ณตํ์ง๋ง, NavigableMap์ ์์/ํ์ ํ์, ๋ด๋ฆผ์ฐจ์ ์กฐํ, ์ฒซ ๋ฒ์งธ/๋ง์ง๋ง ํญ๋ชฉ ์ ๊ฑฐ์ ๊ฐ์ ๋ ๋ง์ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.
ํน์ง | SortedMap | NavigableMap |
์ ๋ ฌ | ํค๊ฐ ํญ์ ์ ๋ ฌ๋ ์ํ | ํค๊ฐ ํญ์ ์ ๋ ฌ๋ ์ํ |
์๋ธ๋งต ๊ธฐ๋ฅ | ์๋ธ๋งต ์ ๊ณต | ์๋ธ๋งต ์ ๊ณต |
์/ํ ํ์ | ์ ๊ณต ์ ํจ | lower(), floor(), ceiling(), higher() ์ ๊ณต |
๋ด๋ฆผ์ฐจ์ ๋งต | ์ ๊ณต ์ ํจ | descendingMap() ์ ๊ณต |
์์ ์ ๊ฑฐ | ์ ๊ณต ์ ํจ | pollFirstEntry(), pollLastEntry() ์ ๊ณต |
8. ๊ฒฐ๋ก
NavigableMap์ ์ ๋ ฌ๋ ๋งต์ ๊ธฐ๋ฅ์ ๋์ฑ ํ์ฅํ ์ธํฐํ์ด์ค๋ก, ์๋ฐฉํฅ ํ์๊ณผ ๋ฒ์ ๊ธฐ๋ฐ์ ์๋ธ๋งต์ ์ ๊ณตํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๋ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์๊ฒ ํด์ค๋ค. TreeMap์ NavigableMap์ ๋ํ์ ์ธ ๊ตฌํ์ฒด๋ก, ์ด์ง ํ์ ํธ๋ฆฌ ๊ธฐ๋ฐ์ ์ฑ๋ฅ๊ณผ ์ ๋ ฌ๋ ๋งต์ ์ฅ์ ์ ๋ชจ๋ ์ ๊ณตํ๋ค.
'๋น ๊ตฌ๋ฉ ์ฑ์ฐ๊ธฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋์์ธ ํจํด][Java] ์์ฐ์-์๋น์ ํจํด Producer-Consumer Pattern (0) | 2024.09.14 |
---|---|
[Java] TreeMap ๊ตฌํ (0) | 2024.09.14 |
[Java] ์์ฐ ์์ Natural Ordering (0) | 2024.09.11 |
[Java] SortedMap (0) | 2024.09.11 |
[Java] HashMap ๊ตฌํ (0) | 2024.09.11 |