Set, Map / Hash, Tree
ย | set | Map |
---|---|---|
์๋ฃํํ | Value ๋ง ์กด์ฌ | Key, Value ์์ผ๋ก ์กด์ฌ |
์ค๋ณต์ฌ๋ถ | ์ค๋ณต ๋ถ๊ฐ | Key๊ฐ ์ค๋ณต ๋ถ๊ฐ |
contains | contains(value) | containsKey(key) |
get | ๋ถ๊ฐ | get(key) |
- Set
- contains ๋ฉ์๋๋ก ๊ฐ์ ์กด์ฌ ์ฌ๋ถ๋ง ํ์ธํ ์ ์์ด ํน์ ์์๋ฅผ getํ๋ ค๋ฉด iterator๋ฅผ ํตํด ์ป์ด์ผ ํจ
- Map
- key๊ฐ์ ํตํด ํด๋นํ๋ value๋ฅผ ๋ฐ๋ก ์ป์ ์ ์์
ย | Hash | Tree |
---|---|---|
์์ | ์์ ์์ | ์ ๋ ฌ ์์ ์ ์ง |
์๊ฐ ๋ณต์ก๋ | O(1) | O(log n) |
Hash์ Tree๋ ์ ํ ๋ค๋ฅธ ๋ด๋ถ ๊ตฌ์กฐ๋ฅผ ๋๊ณ ์๊ธฐ ๋๋ฌธ์ ์๊ฐ ๋ณต์ก๋๊ฐ ๋ค๋ฅด๋ค.
- Hash : ์์๋ฅผ ์ ์งํ์ง ์๋ ๋์ ๋น ๋ฅธ ์๊ฐ์ ๋ณด์ฅ
- Tree : ํธ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ํตํด ์์๋ฅผ ์ ์งํ๊ธฐ ๋๋ฌธ์ ์ฝ๊ฐ ์๊ฐ์ด ๋๋ฆผ
HashSet : ์๋๊ฐ ๋น ๋ฅด๊ณ , Value๋ง ์กด์ฌ, ์กด์ฌ ์ฌ๋ถ๋ง ํ๋ณ ๊ฐ๋ฅ
HashMap : ์๋๊ฐ ๋น ๋ฅด๊ณ , KeyยทValue ์กด์ฌ, get ๊ฐ๋ฅ
TreeSet : ์ ๋ ฌ ์์ ์ ์ง, Value๋ง ์กด์ฌ, ์กด์ฌ ์ฌ๋ถ๋ง ํ๋ณ ๊ฐ๋ฅ
TreeMap : ์ ๋ ฌ ์์ ์ ์ง, KeyยทValue ์กด์ฌ, get ๊ฐ๋ฅ
TreeSet, TreeMap
์ปฌ๋ ์
ํ๋ ์์ํฌ๋ ๊ฒ์ ๊ธฐ๋ฅ์ ๊ฐํ์ํจ TreeSet๊ณผ TreeMap์ ์ ๊ณตํ๊ณ ์๋ค.
TreeSet์ Set์ปฌ๋ ์
์ด๊ณ , TreeMap์ Map์ปฌ๋ ์
์ด๋ค.
์ด ์ปฌ๋ ์
๋ค์ ์ด์ง ํธ๋ฆฌ(binary tree)๋ฅผ ์ด์ฉํด์ ๊ณ์ธต์ ๊ตฌ์กฐ(Tree ๊ตฌ์กฐ)๋ฅผ ๊ฐ์ง๋ฉด์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค.
โ๏ธ ์ด์ง ํธ๋ฆฌ ๊ตฌ์กฐ
- ์ด์ง ํธ๋ฆฌ(binary tree)๋ ์ฌ๋ฌ ๊ฐ์ ๋ ธ๋(node)๊ฐ ํธ๋ฆฌ ํํ๋ก ์ฐ๊ฒฐ๋ ๊ตฌ์กฐ๋ก,
๋ฃจํธ ๋ ธํธ(root node)๋ผ๊ณ ๋ถ๋ฆฌ๋ ํ๋์ ๋ ธ๋์์๋ถํฐ ์์ํด์
๊ฐ ๋ ธ๋์ ์ต๋ 2๊ฐ์ ๋ ธ๋๋ฅผ ์ฐ๊ฒฐํ ์ ์๋ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๊ณ ์๋ค.- ์์๋๋ก ์ฐ๊ฒฐ๋ ๋ ๋ ธ๋๋ฅผ ๋ถ๋ชจ-์์๊ด๊ณ์ ์๋ค๊ณ ํ๋ฉฐ ์์ ๋ ธ๋๋ฅผ ๋ถ๋ชจ ๋ ธ๋, ์๋์ ๋ ธ๋๋ฅผ ์์ ๋ ธ๋๋ผ ํ๋ค.
- ํ๋์ ๋ถ๋ชจ ๋ ธ๋๋ ์ต๋ 2 ๊ฐ์ ์์ ๋ ธ๋์ ์ฐ๊ฒฐ๋ ์ ์๋ค.
- ์ด์ง ํธ๋ฆฌ๋ ๋ถ๋ชจ ๋ ธ๋์ ๊ฐ๋ณด๋ค ์์ ๋ ธ๋๋ ์ผ์ชฝ์ ์์น์ํค๊ณ , ๋ถ๋ชจ ๋ ธ๋์ ๊ฐ๋ณด๋ค ํฐ ๋ ธ๋๋ ์ค๋ฅธ์ชฝ์ ์์น์ํจ๋ค.
(์ซ์๊ฐ ์๋ ๋ฌธ์๋ฅผ ์ ์ฅํ ๊ฒฝ์ฐ์๋ ๋ฌธ์์ ์ ๋์ฝ๋ ๊ฐ์ผ๋ก ๋น๊ตํ๋ค.)- Tree traversal(ํธ๋ฆฌ ์ํ)
v: ๋ ธ๋ ๋ฐฉ๋ฌธ ,L: ์ผ์ชฝ ๋ถ๋ถํธ๋ฆฌ ์ดํ, R: ์ค๋ฅธ์ชฝ ๋ถ๋ถํธ๋ฆฌ ์ดํ
- Pre-Order(์ ์ํ) : vLR
- In-Order(์ค ์ํ) : LvR
- Post-Order(ํ ์ํ) LRv
TreeSet
TreeSet์ ์ด์ง ํธ๋ฆฌ(binary tree)๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ Set ์ปฌ๋ ์
์ด๋ค.
ํ๋์ ๋
ธ๋๋ ๋
ธ๋๊ฐ์ธ value์ ์ผ์ชฝ๊ณผ ์ค๋ฅธ์ชฝ ์์ ๋
ธ๋๋ฅผ ์ฐธ์กฐํ๊ธฐ ์ํ ๋ ๊ฐ์ ๋ณ์๋ก ๊ตฌ์ฑ๋๋ค.
TreeSet์ ๊ฐ์ฒด๋ฅผ ์ ์ฅํ๋ฉด ์๋์ผ๋ก ์ ๋ ฌ๋๋๋ฐ
๋ถ๋ชจ๊ฐ๊ณผ ๋น๊ตํด์ ๋ฎ์ ๊ฒ์ ์ผ์ชฝ ์์ ๋
ธ๋์, ๋์ ๊ฒ์ ์ค๋ฅธ์ชฝ ์์ ๋
ธ๋์ ์ ์ฅ๋๋ค.
1
2
TreeSet<E> treeSet = new TreeSet<E>();
TreeSet<String> treeSet = new TreeSet<>();
TreeSet์ด ๊ฐ์ง๊ณ ์๋ ๋ฉ์๋
๋ฆฌํด ํ์ | ๋ฉ์๋ | ์ค๋ช |
---|---|---|
E | first() | ์ ์ผ ๋ฎ์ ๊ฐ์ฒด๋ฅผ ๋ฆฌํด |
E | last() | ์ ์ผ ๋์ ๊ฐ์ฒด๋ฅผ ๋ฆฌํด |
E | lower(E e) | ์ฃผ์ด์ง ๊ฐ์ฒด๋ณด๋ค ๋ฐ๋ก ์๋ ๊ฐ์ฒด๋ฅผ ๋ฆฌํด |
E | higher(E e) | ์ฃผ์ด์ง ๊ฐ์ฒด๋ณด๋ค ๋ฐ๋ก ์ ๊ฐ์ฒด๋ฅผ ๋ฆฌํด |
E | floor(E e) | ์ฃผ์ด์ง ๊ฐ์ฒด์ ๋๋ฑํ ๊ฐ์ฒด๊ฐ ์์ผ๋ฉด ๋ฆฌํด, ๋ง์ฝ ์๋ค๋ฉด ์ฃผ์ด์ง ๊ฐ์ฒด์ ๋ฐ๋ก ์๋์ ๊ฐ์ฒด๋ฅผ ๋ฆฌํด |
E | ceiling(E e) | ์ฃผ์ด์ง ๊ฐ์ฒด์ ๋๋ฑํ ๊ฐ์ฒด๊ฐ ์์ผ๋ฉด ๋ฆฌํด, ๋ง์ฝ ์๋ค๋ฉด ์ฃผ์ด์ง ๊ฐ์ฒด์ ๋ฐ๋ก ์์ ๊ฐ์ฒด๋ฅผ ๋ฆฌํด |
E | pollFirst() | ์ ์ผ ๋ฎ์ ๊ฐ์ฒด๋ฅผ ๊บผ๋ด์ค๊ณ ์ปฌ๋ ์ ์์ ์ ๊ฑฐํจ |
E | pollLast() | ์ ์ผ ๋์ ๊ฐ์ฒด๋ฅผ ๊บผ๋ด์ค๊ณ ์ปฌ๋ ์ ์์ ์ ๊ฑฐํจ |
ย | ย | ย |
TreeSet์ด ๊ฐ์ง๊ณ ์๋ ์ ๋ ฌ ๋ฉ์๋
๋ฆฌํด ํ์ | ๋ฉ์๋ | ์ค๋ช |
---|---|---|
Iterator | descendingIterator() | ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌ๋ Iterator๋ฅผ ๋ฆฌํด |
NavigableSet | descendingSet() | ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌ๋ NavigableSet์ ๋ฐํ |
1
2
NavigableSet<E> descendingSet = treeSet.descendingSet();
NavigableSet<E> ascendingSet = descendingSet.descendingSet(); // ๋๋ฒ ํธ์ถ
TreeSet์ด ๊ฐ์ง๊ณ ์๋ ๋ฒ์ ๊ฒ์๊ณผ ๊ด๋ จ๋ ๋ฉ์๋
๋ฆฌํด ํ์ | ๋ฉ์๋ | ์ค๋ช |
---|---|---|
NavigableSet | headSet(E toElement, boolean inclusive) | ์ฃผ์ด์ง ๊ฐ์ฒด๋ณด๋ค ๋ฎ์ ๊ฐ์ฒด๋ค์ NavigableSet์ผ๋ก ๋ฆฌํด. ์ฃผ์ด์ง ๊ฐ์ฒด ํฌํจ ์ฌ๋ถ๋ ๋๋ฒ์งธ ๋งค๊ฐ๊ฐ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง. |
NavigableSet | tailSet(E fromElement, boolean inclusive) | ์ฃผ์ด์ง ๊ฐ์ฒด๋ณด๋ค ๋์ ๊ฐ์ฒด๋ค์ NavigableSet์ผ๋ก ๋ฆฌํด. ์ฃผ์ด์ง ๊ฐ์ฒด ํฌํจ ์ฌ๋ถ๋ ๋๋ฒ์งธ ๋งค๊ฐ๊ฐ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋ค. |
NavigableSet | subSet (E fromElement, boolean fromInclusive, E toElement, boolean toInclusive) | ์์๊ณผ ๋์ผ๋ก ์ฃผ์ด์ง ๊ฐ์ฒด ์ฌ์ด์ ๊ฐ์ฒด๋ค์ NavigableSet์ผ๋ก ๋ฆฌํด. ์์๊ณผ ๋ ๊ฐ์ฒด ํฌํจ์ฌ๋ถ๋ ๋๋ฒ์งธ, ๋ค ๋ฒ์งธ ๋งค๊ฐ๊ฐ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋ค. |
TreeMap
TreeMap๋ TreeSet์ฒ๋ผ ์ด์ง ํธ๋ฆฌ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ Map ์ปฌ๋ ์
์ด๋ค.
TreeSet๊ณผ์ ์ฐจ์ด์ ์ ํค์ ๊ฐ์ด ์ ์ฅ๋ Map.Entry๋ฅผ ์ ์ฅํ๋ค๋ ์ ์ด๋ค.
TreeMap์ ๊ฐ์ฒด๋ฅผ ์ ์ฅํ๋ฉด ์๋์ผ๋ก ์ ๋ ฌ๋๋๋ฐ,
๊ธฐ๋ณธ์ ์ผ๋ก ๋ถ๋ชจ ํค๊ฐ๊ณผ ๋น๊ตํ์ฌ
ํค ๊ฐ์ด ๋ฎ์ ๊ฒ์ ์ผ์ชฝ ์์ ๋
ธ๋์, ํค ๊ฐ์ด ๋์ ๊ฒ์ ์ค๋ฅธ์ชฝ ์์ ๋
ธ๋์ Map.Entry ๊ฐ์ฒด๋ฅผ ์ ์ฅํ๋ค.
1
2
TreeMap<K,V> treeMap = new TreeMap<K,V>();
TreeMap<String, Integer> treeMap = new TreeMap<>();
TreeMap์ด ๊ฐ์ง๊ณ ์๋ ๊ฒ์ ๊ด๋ จ ๋ฉ์๋
๋ฆฌํด ํ์ | ๋ฉ์๋ | ์ค๋ช |
---|---|---|
Map.Entry<K,V> | firstEntry() | ์ ์ผ ๋ฎ์ Map.Entry๋ฅผ ๋ฆฌํด |
Map.Entry<K,V> | lastEntry() | ์ ์ผ ๋์ Map.Entry๋ฅผ ๋ฆฌํด |
Map.Entry<K,V> | lowerEntry(K key | ์ฃผ์ด์ง ํค๋ณด๋ค ๋ฐ๋ก ์๋ Map.Entry๋ฅผ ๋ฆฌํด |
Map.Entry<K,V> | higherEntry(K key) | ์ฃผ์ด์ง ํค๋ณด๋ค ๋ฐ๋ก ์ Map.Entry๋ฅผ ๋ฆฌํด |
Map.Entry<K,V> | floorEntry(K key) | ์ฃผ์ด์ง ํค์ ๋๋ฑํ ํค๊ฐ ์์ผ๋ฉด ํด๋น Map.Entry๋ฅผ ๋ฆฌํด, ๋ง์ฝ ์๋ค๋ฉด ์ฃผ์ด์ง ํค์ ๋ฐ๋ก ์๋์ ํค์ Map.Entry๋ฅผ ๋ฆฌํด |
Map.Entry<K,V> | ceilingEntry(K key) | ์ฃผ์ด์ง ํค์ ๋๋ฑํ ํค๊ฐ ์์ผ๋ฉด Map.Entry๋ฅผ ๋ฆฌํด, ๋ง์ฝ ์๋ค๋ฉด ์ฃผ์ด์ง ํค์ ๋ฐ๋ก ์์ ํค์ Map.Entry๋ฅผ ๋ฆฌํด |
Map.Entry<K,V> | pollFirstEntry() | ์ ์ผ ๋ฎ์ Map.Entry๋ฅผ ๊บผ๋ด์ค๊ณ ์ปฌ๋ ์ ์์ ์ ๊ฑฐํจ |
Map.Entry<K,V> | pollLastEntry() | ์ ์ผ ๋์ Map.Entry๋ฅผ ๊บผ๋ด์ค๊ณ ์ปฌ๋ ์ ์์ ์ ๊ฑฐํจ |
TreeMap์ด ๊ฐ์ง๊ณ ์๋ ์ ๋ ฌ ๊ด๋ จ ๋ฉ์๋
๋ฆฌํด ํ์ | ๋ฉ์๋ | ์ค๋ช |
---|---|---|
NavigableSet | descendingKeySet() | ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌ๋ ํค์ NavigableSet์ ๋ฆฌํด |
NavigableMap<K,V> | descendingMap() | ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌ๋ Map.Entry์ NavigableMap์ ๋ฐํ |
1
2
NavigableMap<K,V> descendingMap = treeMap.descendingMap(); //๋ด๋ฆผ์ฐจ์
NavigableMap<K,V> ascendingMap = descendingMap.descendingMap(); //์ค๋ฆ์ฐจ์
๋ฆฌํด ํ์ | ๋ฉ์๋ | ์ค๋ช |
---|---|---|
NavigableMap<K,V> | headMap(K toKey, boolean inclusive) | ์ฃผ์ด์ง ํค๋ณด๋ค ๋ฎ์ ํค์ Map.Entry๋ค์ NavigableMap์ผ๋ก ๋ฆฌํด. ์ฃผ์ด์ง ํค์ Map.Entry์ ํฌํจ ์ฌ๋ถ๋ ๋๋ฒ์งธ ๋งค๊ฐ๊ฐ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง. |
NavigableMap<K,V> | tailMap(K fromKey, boolean inclusive) | ์ฃผ์ด์ง ํค๋ณด๋ค ๋์ ํค๋ค์ NavigableMap์ผ๋ก ๋ฆฌํด. ์ฃผ์ด์ง ํค์ Map.Entry์ ํฌํจ ์ฌ๋ถ๋ ๋๋ฒ์งธ ๋งค๊ฐ๊ฐ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋ค. |
NavigableMap<K,V> | subMap(K fromKey, boolean fromInclusive, K toKey, boolean toInclusive) | ์์๊ณผ ๋์ผ๋ก ์ฃผ์ด์ง ํค ์ฌ์ด์ ํค๋ค์ Map.Entry์ NavigableMap์ผ๋ก ๋ฆฌํด. ์์๊ณผ ๋ ํค์ Map.Entry ํฌํจ์ฌ๋ถ๋ ๋๋ฒ์งธ, ๋ค ๋ฒ์งธ ๋งค๊ฐ๊ฐ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋ค. |
Comparable ๊ณผ Comparator
TreeSet ๊ฐ์ฒด์ TreeMap์ ํค๋ ์ ์ฅ๊ณผ ๋์์ ์๋ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌ๋๋๋ฐ,
์ซ์(Integer,Double)ํ์
์ผ ๊ฒฝ์ฐ์๋ ๊ฐ์ผ๋ก ์ ๋ ฌํ๊ณ , ๋ฌธ์์ด(String)์ผ ๊ฒฝ์ฐ์๋ ์ ๋์ฝ๋๋ก ์ ๋ ฌํ๋ค.
TreeSet๊ณผ TreeMap์ ์ ๋ ฌ์ ์ํด java.lang.Comparable์ ๊ตฌํํ ๊ฐ์ฒด๋ฅผ ์๊ตฌํ๋๋ฐ,
Integer, Double, String์ ๋ชจ๋ Comparable ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๊ณ ์๋ค.
์ฌ์ฉ์ ์ ์ ํด๋์ค๋ Comparable์ ๊ตฌํํ๋ค๋ฉด ์๋ ์ ๋ ฌ์ด ๊ฐ๋ฅํ๋ค.
Comparable์๋ compareTo()๋ฉ์๋๊ฐ ์ ์๋์ด ์๊ธฐ ๋๋ฌธ์
์ฌ์ฉ์ ์ ์ ํด๋์ค์์๋ ์ด ๋ฉ์๋๋ฅผ ์ค๋ฒ๋ผ์ด๋ฉ(์ฌ์ ์)ํ์ฌ ๋ค์๊ณผ ๊ฐ์ด ๋ฆฌํด ๊ฐ์ ๋ง๋ค์ด์ผ ํ๋ค.
๋ฆฌํด ํ์ | ๋ฉ์๋ | ์ค๋ช |
---|---|---|
int | compareTo(To) | ์ฃผ์ด์ง ๊ฐ์ฒด์ ๊ฐ์ผ๋ฉด 0์ ๋ฆฌํด ์ฃผ์ด์ง ๊ฐ์ฒด๋ณด๋ค ์ ์ผ๋ฉด ์์๋ฅผ ๋ฆฌํด ์ฃผ์ด์ง ๊ฐ์ฒด๋ณด๋ค ํฌ๋ฉด ์์๋ฅผ ๋ฆฌํด ์ค๋ฆ์ฐจ์, ๋ด๋ฆผ์ฐจ์ ๋ค ๊ฐ๋ฅ |
TreeSet์ ๊ฐ์ฒด์ TreeMap์ ํค๊ฐ Comparable์ ๊ตฌํํ๊ณ ์์ง ์์ ๊ฒฝ์ฐ์๋
์ ์ฅํ๋ ์๊ฐ ClassCastException์ด ๋ฐ์ํ๋ฏ๋ก ์ฃผ์ํ์.
(์ฐธ๊ณ )
- [Java] HashSet, HashMap, TreeSet, TreeMap ์ ๋ฆฌ
- [์ด๊ฒ์ด์๋ฐ๋ค] chapter 15. ์ปฌ๋ ์ - ๊ฒ์ ๊ธฐ๋ฅ์ ๊ฐํ์ํจ ์ปฌ๋ ์ TreeSet, TreeMap
๊ณต๋ถํ ๋ด์ฉ์ ์ฌ๋ฌ๊ธ๊ณผ ์ฑ
์ฝ์ ๋ด์ฉ์ ๋ฐํ์ผ๋ก ์ ๋ฆฌํ๊ณ ์์ต๋๋ค.
์ข์ ๊ธ๋ก ์ ์ ๊ณต๋ถ์ ๋์์ ์ฃผ์๋ ๋ถ๋ค๊ป ๊ฐ์ฌ๋๋ฆฝ๋๋ค.