-
Set, Queue, Map๊ฐ๋ฐ/Java 2022. 4. 19. 00:38
Set
Set์ ์์์ ์๊ด ์์ด, ์ด๋ค ๋ฐ์ดํฐ๊ฐ ์กด์ฌํ๋์ง๋ฅผ ํ์ธํ๊ธฐ ์ํ ์ฉ๋๋ก ๋ง์ด ์ฌ์ฉ๋๋ค. ๋ค์ ๋งํด์, ์ค๋ณต๋๋ ๊ฒ์ ๋ฐฉ์งํ๊ณ , ์ํ๋ ๊ฐ์ด ํฌํจ๋์ด ์๋์ง๋ฅผ ํ์ธํ๋ ๊ฒ์ด ์ฃผ ์ฉ๋๋ค. ์ด์ฒ๋ผ ์ด๋ค ๊ฐ์ด ์กด์ฌํ๋์ง, ์๋์ง ์ฌ๋ถ๋ง ์ค์ํ ๋ Set์ ์ฌ์ฉํ๋ฉด ๋๋ค.
์๋ฐ์์ Set์ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ์ฃผ์ ํด๋์ค๋ HashSet, TreeSet, LinkedHashSet์ด ์๋ค.
- HashSet : ์์๊ฐ ์ ํ ํ์ ์๋ ๋ฐ์ดํฐ๋ฅผ ํด์ ํ ์ด๋ธ(hash table)์ ์ ์ฅํ๋ค. Set ์ค์ ๊ฐ์ฅ ์ฑ๋ฅ์ด ์ข๋ค.
- TreeSet : ์ ์ฅ๋ ๋ฐ์ดํฐ์ ๊ฐ์ ๋ฐ๋ผ์ ์ ๋ ฌ๋๋ ์ ์ด๋ค. red-black์ด๋ผ๋ ํธ๋ฆฌ(tree) ํ์ ์ผ๋ก ๊ฐ์ด ์ ์ฅ๋๋ฉฐ, HashSet ๋ณด๋ค ์ฝ๊ฐ ์ฑ๋ฅ์ด ๋๋ฆฌ๋ค.
- LinkedHashSet : ์ฐ๊ฒฐ๋ ๋ชฉ๋ก ํ์ ์ผ๋ก ๊ตฌํ๋ ํด์ ํ ์ด๋ธ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ค. ์ ์ฅ๋ ์์์ ๋ฐ๋ผ์ ๊ฐ์ด ์ ๋ ฌ๋๋ค. ๋์ ์ฑ๋ฅ์ด ์ด ์ ์ค์์ ๊ฐ์ฅ ๋์๋ค.์ด๋ฌํ ์ฑ๋ฅ ์ฐจ์ด๊ฐ ๋ฐ์ํ๋ ์ด์ ๋ ๋ฐ๋ก ๋ฐ์ดํฐ ์ ๋ ฌ ๋๋ฌธ์ด๋ค. HashSet์ ๋ณ๋์ ์ ๋ ฌ ์์ ์ด ์์ด ์ ์ผ ๋น ๋ฅด๋ค.
red-black ํธ๋ฆฌ๋ ๊ฐ ๋ ธ๋์ ์์ ๋ถ์ ์ ํน์ ๊ฒ์ ์์ผ๋ก ๊ตฌ๋ถํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๋น ๋ฅด๊ณ , ์ฝ๊ฒ ์ฐพ์ ์ ์๋ ๊ตฌ์กฐ์ ์ด์ง(binary) ํธ๋ฆฌ๋ฅผ ๋งํ๋ค.
http://ko.wikipedia.org/wiki/๋ ๋-๋ธ๋_ํธ๋ฆฌ
HashSet
java.lang.Object ใด java.util.AbstractCollection<E> ใด java.util.AbstractSet<E> ใด java.util.HashSet<E>
AbstractCollection์ ํ์ฅํ ๊ฒ์ ArrayList์ ๋์ผํ๋ค. ํ์ง๋ง, HashSet์ AbstractSet์ ํ์ฅํ๋ค. AbstractSet ํด๋์ค๋ ์ด๋ฆ ๊ทธ๋๋ก abstract ํด๋์ค์ด๋ค. ๊ตฌํ๋์ด ์๋ ๋ฉ์๋๋ Object ํด๋์ค์ ์ ์ธ๋์ด ์๋ equals(), hashCode() ๋ฉ์๋์ ์ด ํด๋์ค์์ ์ถ๊ฐํ removeAll() ๋ฟ์ด๋ค.
Set์ ๋ฌด์๋ณด๋ค๋ ๋ฐ์ดํฐ๊ฐ ์ค๋ณต๋๋ ๊ฒ์ ํ์ฉํ์ง ์์ผ๋ฏ๋ก, ๋ฐ์ดํฐ๊ฐ ๊ฐ์์ง๋ฅผ ํ์ธํ๋ ์์ ์ Set์ ํต์ฌ์ด๋ค. ๊ทธ๋ฆฌ๊ณ , equals() ๋ฉ์๋๋ hashCode() ๋ฉ์๋์ ๋จ์ด์ง ์ ์๋ ๋ถ๊ฐ๋ถ์ ๊ด๊ณ์ด๋ค. ๋ฐ๋ผ์, equals()์ hashCode() ๋ฉ์๋๋ฅผ ๊ตฌํํ๋ ๋ถ๋ถ์ Set์์ ๋งค์ฐ ์ค์ํ๋ค. ์ถ๊ฐ๋ก removeAll() ๋ฉ์๋๋ ์ปฌ๋ ์ ์ ๋งค๊ฐ ๋ณ์๋ก ๋ฐ์, ๋งค๊ฐ ๋ณ์ ์ปฌ๋ ์ ์ ํฌํจ๋ ๋ณด์ ๋ฐ์ดํฐ๋ฅผ ์ง์ธ ๋ ์ฌ์ฉํ๋ค.
HashSet์ด ์ด๋ค ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋์ง ๋ณด์.
์ธํฐํ์ด์ค ์ฉ๋ Serializable ์๊ฒฉ์ผ๋ก ๊ฐ์ฒด๋ฅผ ์ ์กํ๊ฑฐ๋, ํ์ผ์ ์ ์ฅํ ์ ์์์ ์ง์ Cloneable Object ํด๋์ค์ clone() ๋ฉ์๋๊ฐ ์ ๋๋ก ์ํ๋ ์ ์์์ ์ง์ . ์ฆ, ๋ณต์ ๊ฐ ๊ฐ๋ฅํ ๊ฐ์ฒด์์ ์๋ฏธํ๋ค. Iterable<E> ๊ฐ์ฒด๊ฐ "foreach" ๋ฌธ์ฅ์ ์ฌ์ฉํ ์ ์์์ ์ง์ Collection<E> ์ฌ๋ฌ ๊ฐ์ ๊ฐ์ฒด๋ฅผ ํ๋์ ๊ฐ์ฒด์ ๋ด์ ์ฒ๋ฆฌํ ๋์ ๋ฉ์๋ ์ง์ Set<E> ์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ๊ฒ์ ๊ด๋ จ๋ ๋ฉ์๋ ์ง์ ๐กList์๋ ์ ์๋์ด ์์ง๋ง, Set์๋ ์ ์๋์ด ์์ง ์๋ ๋ฉ์๋๋ ์ด๋ค ๊ฒ์ด ์์๊น?
Set์ ์์๊ฐ ์๋ค. ๋ฐ๋ผ์, ์์๊ฐ ๋งค๊ฐ ๋ณ์๋ก ๋์ด๊ฐ๋ ๋ฉ์๋๋, ์ํ ๊ฒฐ๊ณผ๊ฐ ๋ฐ์ดํฐ์ ์์น์ ๊ด๋ จ๋ ๋ฉ์๋๋ Set ์ธํฐํ์ด์ค์์๋ ํ์๊ฐ ์๋ค. ๊ทธ๋ฌ๋ฏ๋ก get(int index)๋ indexOf(Object o)์ ๊ฐ์ ๋ฉ์๋๋ค์ Set์ ์กด์ฌํ์ง ์๋๋ค.
๐กHastSet์ ์์ฑ์์์ ์ฌ์ฉํ๋ ๋ก๋ ํฉํฐ(load factor)๋ผ๋ ๊ฒ์ ๋ญ๊น?
๋ก๋ ํฉํฐ๋ (๋ฐ์ดํฐ์ ๊ฐ์) / (์ ์ฅ ๊ณต๊ฐ)์ ์๋ฏธํ๋ค. ๋ง์ฝ ๋ฐ์ดํฐ์ ๊ฐ์๊ฐ ์ฆ๊ฐํ์ฌ ๋ก๋ ํฉํฐ๋ณด๋ค ์ปค์ง๋ฉด, ์ ์ฅ ๊ณต๊ฐ์ ํฌ๊ธฐ๋ ์ฆ๊ฐ๋๊ณ ํด์ ์ฌ์ ๋ฆฌ ์์ (refresh)์ ํด์ผ ํ๋ค. ๋ฐ์ดํฐ๊ฐ ํด์ ์ฌ์ ๋ฆฌ ์์ ์ ๋ค์ด๊ฐ๋ฉด, ๋ด๋ถ์ ๊ฐ๊ณ ์๋ ์๋ฃ ๊ตฌ์กฐ๋ฅผ ๋ค์ ์์ฑํ๋ ๋จ๊ณ๋ฅผ ๊ฑฐ์ณ์ผ ํ๋ฏ๋ก ์ฑ๋ฅ์ ์ํฅ์ด ๋ฐ์ํ๋ค.
๋ก๋ ํฉํฐ๋ผ๋ ๊ฐ์ด ํด์๋ก ๊ณต๊ฐ์ ๋๋ํด์ง์ง๋ง, ๋ฐ์ดํฐ๋ฅผ ์ฐพ๋ ์๊ฐ์ ์ฆ๊ฐํ๋ค. ๋ฐ๋ผ์, ์ด๊ธฐ ๊ณต๊ฐ ๊ฐ์์ ๋ก๋ ํฉํฐ๋ ๋ฐ์ดํฐ์ ํฌ๊ธฐ๋ฅผ ๊ณ ๋ คํ์ฌ ์ฐ์ ํ๋ ๊ฒ์ด ์ข๋ค. ์๋ํ๋ฉด ์ด๊ธฐ ํฌ๊ธฐ๊ฐ (๋ฐ์ดํฐ์ ๊ฐ์) / (๋ก๋ ํฉํฐ) ๋ณด๋ค ํด ๊ฒฝ์ฐ์๋ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ฒ ์ฐพ๊ธฐ ์ํ ํด์ ์ฌ์ ๋ฆฌ ์์ ์ด ๋ฐ์ํ์ง ์๊ธฐ ๋๋ฌธ์ด๋ค. ๋ฐ๋ผ์, ๋๋์ ๋ฐ์ดํฐ๋ฅผ ์ฌ๊ธฐ์ ๋ด์ ์ฒ๋ฆฌํ ๋์๋ ์ด๊ธฐ ํฌ๊ธฐ์ ๋ก๋ ํฉํฐ์ ๊ฐ์ ์กฐ์ ํด ๊ฐ๋ฉด์ ๊ฐ์ฅ ์ ์ ํ ํฌ๊ธฐ๋ฅผ ์ฐพ์์ผ๋ง ํ๋ค.
Queue
LinkedList๋ List ์ธํฐํ์ด์ค๋ฟ๋ง ์๋๋ผ Queue์ Deque ์ธํฐํ์ด์ค๋ ๊ตฌํํ๊ณ ์๋ค. ์ฆ, LinkedList ์์ฒด๊ฐ List์ด๋ฉด์๋ Queue, Deque๋ ๋๋ค.
ํ๋ FIFO์ ์ฉ๋๋ก ์ฌ์ฉํ๋ค. First In First Out์ ์ฝ์๋ก ๋จผ์ ๋ค์ด์จ ์ ๊ฐ ๋จผ์ ๋๊ฐ๋ ๊ฒ์ ๋งํ๋ค.
๋ํ Java 6์์ ์ถ๊ฐ๋ Deque๋ "Double Ended Queue"์ ์ฝ์์ด๋ค. Deque๋ Queue ์ธํฐํ์ด์ค๋ฅผ ํ์ฅํ์๊ธฐ ๋๋ฌธ์, Queue์ ๊ธฐ๋ฅ์ ์ ๋ถ ํฌํจํ๋ค. ๋์ , ๋งจ ์์ ๊ฐ์ ๋ฃ๊ฑฐ๋ ๋นผ๋ ์์ , ๋งจ ๋ค์ ๊ฐ์ ๋ฃ๊ฑฐ๋ ๋นผ๋ ์์ ์ ์ํํ๋ ๋ฐ ์ฉ์ดํ๋๋ก ๋์ด ์๋ค๊ณ ๋ณด๋ฉด ๋๋ค.
๐กLinkedList๋ ์ ์ฐ๋ ๊ฒ์ผ๊น?
๋ง์ฝ, ๊ฐ๋จํ๊ฒ ๋ฐฐ์ด๊ณผ ๊ฐ์ด ๋ฐ์ดํฐ๋ฅผ ๋ด์์ ์์ฐจ์ ์ผ๋ก ๋บ ๊ฒฝ์ฐ์๋ ๋ณ ํ์๊ฐ ์์ ์๋ ์๋ค. ํ์ง๋ง, ๋ฐฐ์ด์ ์ค๊ฐ์ ์๋ ๋ฐ์ดํฐ๊ฐ ์ง์์ ์ผ๋ก ์ญ์ ๋๊ณ , ์ถ๊ฐ๋ ๊ฒฝ์ฐ์๋ LinkedList๊ฐ ๋ฐฐ์ด๋ณด๋ค ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ ์ธก๋ฉด์์ ํจ์ฌ ์ ๋ฆฌํ๋ค. ์๋ํ๋ฉด, ArrayList์ Vector๋ ๊ฐ ์์น๊ฐ ์ ํด์ ธ ์๊ณ , ๊ทธ ์์น๋ก ๋ฐ์ดํฐ๋ฅผ ์ฐพ๋๋ค. ๊ทธ๋ฐ๋ฐ, ๋งจ ์์ ๊ฐ์ ์ญ์ ํ๋ฉด, ๊ทธ ๋ค์ ์๋ ๊ฐ๋ค์ ํ๋์ฉ ์์ผ๋ก ์์น๋ฅผ ์ด๋ํด์ผ ์ ๋๋ก ๋ ์์น์ ๊ฐ์ ๊ฐ์ง๊ฒ ๋๋ค. ๊ทธ์ ๋ฐํด LinkedList๋ ์ค๊ฐ์ ์๋ ๋ฐ์ดํฐ๋ฅผ ์ญ์ ํ๋ฉด, ์ง์ด ๋ฐ์ดํฐ์ ์์ ์๋ ๋ฐ์ดํฐ์ ๋ค์ ์๋ ๋ฐ์ดํฐ๋ฅผ ์ฐ๊ฒฐํ๋ฉด ๊ทธ๋ง์ด๋ค. ์์น๋ฅผ ๋ง์ถ๊ธฐ ์ํด ๊ฐ์ ์ด๋ํ๋ ๋จ๊ณ๋ฅผ ๊ฑฐ์น ํ์๊ฐ ์๋ค๋ ๋ป์ด๋ค.
LinkedList๋ฅผ ๊ฐ์ฅ ์ฝ๊ฒ ์ดํดํ๋ ค๋ฉด ์ด์ฐจ๋ฅผ ์๊ฐํ๋ฉด ๋๋ค.
LinkedList์์๋ ์์ ์๋ ์ ์ ๋ค์ ์๋ ์ ๋ง ๊ธฐ์ตํ๋ฉด๋๋ค. ๋ค์ ๋งํด์, 10์ ๋ค์ ์๋ ๊ฐ์ด 20์ด๋ผ๋ ๊ฒ๋ง ์๊ณ , 30์ด ์๋ค๋ ๊ฒ์ ์๊ฐ๋ ์ํ๋ค. ๊ทธ๋ฆฌ๊ณ 30์ด๋ผ๋ ์ ๋ ์์ 20์ด๋ผ๋ ๊ฒ๋ง ๊ธฐ์ตํ๋ค.
LinkedList
java.lang.Object ใด java.util.AbstractCollection<E> ใด java.util.AbstractList<E> ใด java.util.AbstractSequentialList<E> ใด java.java.util.LinkedList<E>
ArrayList ํด๋์ค๋ Vector ํด๋์ค์ ์์๊ด๊ณ๋ ๋น์ทํ์ง๋ง, AbstractSequentialList๊ฐ ๋ถ๋ชจ์ธ ๊ฒ์ ๋ณผ ์ ์๋ค. AbstractList์ AbstractSequentialList์ ์ฐจ์ด์ ์ add(), set(), remove() ๋ฑ์ ๋ฉ์๋์ ๋ํ ๊ตฌํ ๋ด์ฉ์ด ์์ดํ๋ค๋ ์ ๋๋ค.
LinkedList ํด๋์ค๊ฐ ๊ตฌํํ ์ธํฐํ์ด์ค์ ๋ชฉ๋ก์ ์ดํด๋ณด์.
์ธํฐํ์ด์ค ์ฉ๋ Serializable ์๊ฒฉ์ผ๋ก ๊ฐ์ฒด๋ฅผ ์ ์กํ๊ฑฐ๋, ํ์ผ์ ์ ์ฅํ ์ ์์์ ์ง์ Cloneable Object ํด๋์ค์ clone() ๋ฉ์๋๊ฐ ์ ๋๋ก ์ํ๋ ์ ์์์ ์ง์ . ์ฆ, ๋ณต์ ๊ฐ ๊ฐ๋ฅํ ๊ฐ์ฒด์์ ์๋ฏธํ๋ค. Iterable<E> ๊ฐ์ฒด๊ฐ "foreach" ๋ฌธ์ฅ์ ์ฌ์ฉํ ์ ์์์ ์ง์ Collection<E> ์ฌ๋ฌ ๊ฐ์ ๊ฐ์ฒด๋ฅผ ํ๋์ ๊ฐ์ฒด์ ๋ด์ ์ฒ๋ฆฌํ ๋์ ๋ฉ์๋ ์ง์ Deque<E> ๋งจ ์๊ณผ ๋งจ ๋ค์ ๊ฐ์ ์ฉ์ดํ๊ฒ ์ฒ๋ฆฌํ๋ ํ์ ๊ด๋ จ๋ ๋ฉ์๋ ์ง์ List<E> ๋ชฉ๋กํ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ๊ฒ๊ณผ ๊ด๋ จ๋ ๋ฉ์๋ ์ง์ Queue<E> ํ๋ฅผ ์ฒ๋ฆฌํ๋ ๊ฒ๊ณผ ๊ด๋ จ๋ ๋ฉ์๋ ์ง์ Map
์๋ฐ์์์ Map์ ํค(Key)์ ๊ฐ(Value)์ผ๋ก ์ด๋ฃจ์ด์ ธ ์๋ค. ์๋ฐ์ Map์ ํค์ ๊ฐ์ด 1:1๋ก ์ง์ ๋๋ค. ๊ทธ๋ฐ๋ฐ, ์ด ํค๋ ํด๋น Map์์ ์ค๋ณต๋์ง ์๋๋ค. ๋ง์ฝ ํค๊ฐ ๋ค๋ฅด๊ณ , ๊ฐ์ด ๋์ผํ๋ค๋ฉด ๋งต์์๋ ๋ค๋ฅธ ๊ฒ์ผ๋ก ๊ฐ์ฃผํ๋ค.
์ด์ฒ๋ผ Map์,
1. ๋ชจ๋ ๋ฐ์ดํฐ๋ ํค์ ๊ฐ์ด ์กด์ฌํ๋ค.
2. ํค๊ฐ ์์ด ๊ฐ๋ง ์ ์ฅ๋ ์๋ ์๋ค.
3. ๊ฐ ์์ด ํค๋ง ์ ์ฅ๋ ์๋ ์๋ค.
4. ํค๋ ํด๋น Map์์ ๊ณ ์ ํด์ผ๋ง ํ๋ค.
5. ๊ฐ์ ํด๋น Map์์ ์ค๋ณต๋์ด๋ ์ ํ ์๊ด ์๋ค.Map์ java.util ํจํค์ง์ Map์ด๋ผ๋ ์ด๋ฆ์ ์ธํฐํ์ด์ค๋ก ์ ์ธ๋์ด ์๊ณ , ๊ตฌํํด ๋์ ํด๋์ค๋ค๋ ๋ง์ด ์๋ค.
Map ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ํด๋์ค๋ค์ ๋งค์ฐ ๋ค์ํ๊ณ ๋ง๋ค. ๊ทธ ์ค์์ HashMap, TreeMap, LinkedHashMap ๋ฑ์ด ๊ฐ์ฅ ์ ๋ช ํ๊ณ , ๊ฐ๋ฐ์๋ค์ด ์ ์ฉํ๋ ํด๋์ค๋ค. ๊ทธ๋ฆฌ๊ณ , Hashtable์ด๋ผ๋ ํด๋์ค๋ ์๋ค.
Hashtable
Hashtable ํด๋์ค๋ Map ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๊ธฐ๋ ํ์ง๋ง, ์ผ๋ฐ์ ์ธ Map ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ํด๋์ค๋ค๊ณผ๋ ๋ค๋ฅด๋ค.
์ด ๋ ์ข ๋ฅ์ ๋ค๋ฅธ ์ ์ ๊ฐ๋จํ๊ฒ ์ ๋ฆฌํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
- Map์ ์ปฌ๋ ์ ๋ทฐ(Collection View)๋ฅผ ์ฌ์ฉํ์ง๋ง, Hashtable์ Enumeration๊ฐ์ฒด๋ฅผ ํตํด์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ค.
- Map์ ํค, ๊ฐ, ํค-๊ฐ ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ํํ์ฌ ์ฒ๋ฆฌํ ์ ์์ง๋ง, HashTable์ ์ด ์ค์์ ํค-๊ฐ ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ํํ์ฌ ์ฒ๋ฆฌํ ์ ์๋ค.
- Map์ ์ดํฐ๋ ์ด์ ์ ์ฒ๋ฆฌํ๋ ๋์ค์ ๋ฐ์ดํฐ๋ฅผ ์ญ์ ํ๋ ์์ ํ ๋ฐฉ๋ฒ์ ์ ๊ณตํ์ง๋ง, HashTable์ ๊ทธ๋ฌํ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ง ์๋๋ค.๊ทธ๋ฐ๋ฐ, HashMap ํด๋์ค์ Hashtable ํด๋์ค๋ ๋ค์๊ณผ ๊ฐ์ ์ฐจ์ด๊ฐ ์๋ค.
๊ธฐ๋ฅ HashMap Hashtable ํค๋ ๊ฐ์ null ์ ์ฅ ๊ฐ๋ฅ ์ฌ๋ถ ๊ฐ๋ฅ ๋ถ๊ฐ๋ฅ ์ฌ๋ฌ ์ฐ๋ ๋ ์์ ์ฌ๋ถ ๋ถ๊ฐ๋ฅ ๊ฐ๋ฅ ํนํ, Hashtable์ ์ ์ธํ ๋๋จธ์ง Map์ผ๋ก ๋๋๋ ํด๋์ค๋ค์ ์ฌ๋ฌ ์ฐ๋ ๋์์ ๋์์ ์ ๊ทผํ์ฌ ์ฒ๋ฆฌํ ํ์๊ฐ ์์ ๋์๋ ๋ค์๊ณผ ๊ฐ์ด ์ ์ธํด์ ์ฌ์ฉํด์ผ๋ง ํ๋ค.
Map m = Collections.synchronizedMap(new HashMap(...));
์ถ๊ฐ๋ก, ์๋ฐ ๊ธฐ๋ณธ API ์ค์์ JDK 1.0๋ถํฐ ์ ๊ณต๋๋ Hashtable, Vector๋ ํด๋์ค๊ฐ ์ฐ๋ ๋์ ์์ ํ๊ฒ ๊ฐ๋ฐ๋์ด ์๋ค. ๊ทธ ์ธ์ JDK 1.2๋ถํฐ ์ ๊ณต๋๋ ๋๋ถ๋ถ์ Collection ๊ด๋ จ ํด๋์ค๋ค์ ์ด์ ๊ฐ์ ์ฒ๋ฆฌ๋ฅผ ํด์ผ ํ๊ฑฐ๋ ์ด๋ฆ์ Concurrent๊ฐ ํฌํจ๋์ด ์์ด์ผ๋ง ์ฐ๋ ๋์ ์์ ํ๊ฒ ์ฌ์ฉํ ์ ์๋ค. ๊ทธ๋ฆฌ๊ณ , ์ด๋ฌํ ์ฒ๋ฆฌ๊ฐ ํ์ํ ํด๋์ค์ API์๋ ๋ฐ๋์ ๊ด๋ จ๋ ์ค๋ช ์ด ์ ๊ณต๋๋ฏ๋ก API๋ฅผ ์ฐธ๊ณ ํ๋ ์ต๊ด์ ๋ค์ด๋๋ก ํ์. (์๋ฅผ ๋ค๋ฉด JDK 1.5์ ์ถ๊ฐ๋ ConcurrentHashMap, ConpyWriteArrayList ๋ฑ์ด ์์ผ๋ฉฐ, java.util.concurrent ํจํค์ง ์์์ด๋ค)
HashMap
HashMap
java.lang.Object ใด java.util.AbstractMap<K, V> ใด java.util.HashMap<K, V>
HashMap ํด๋์ค๋ AbstractMap์ด๋ผ๋ Abstract ํด๋์ค๋ฅผ ํ์ฅํ์ผ๋ฉฐ, ๋๋ถ๋ถ์ ์ฃผ์ ๋ฉ์๋๋ AbstratctMap ํด๋์ค๊ฐ ๊ตฌํํด ๋์๋ค.
์ด๋ค ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋์ง ์์๋ณด์.
์ธํฐํ์ด์ค ์ฉ๋ Serializable ์๊ฒฉ์ผ๋ก ๊ฐ์ฒด๋ฅผ ์ ์กํ๊ฑฐ๋, ํ์ผ์ ์ ์ฅํ ์ ์์์ ์ง์ Cloneable Object ํด๋์ค์ clone() ๋ฉ์๋๊ฐ ์ ๋๋ก ์ํ๋ ์ ์์์ ์ง์ . ์ฆ, ๋ณต์ ๊ฐ ๊ฐ๋ฅํ ๊ฐ์ฒด์์ ์๋ฏธํ๋ค. Map<E> ๋งต์ ๊ธฐ๋ณธ ๋ฉ์๋ ์ง์ TreeMap
๋ง์ฝ HashMap ๊ฐ์ฒด์ ํค๋ฅผ ์ ๋ ฌํ๋ ค๋ฉด ์ฌ๋ฌ ๊ฐ์ง ๋ฐฉ๋ฒ์ ์ฌ์ฉํด์ผ ํ๋ค. ์ด๋ด ๋ ์ฌ์ฉํ ์ ์๋ TreeMap์ด๋ผ๋ ํด๋์ค๊ฐ ์๋ค. ์ด ํด๋์ค๋ ์ ์ฅํ๋ฉด์, ํค๋ฅผ ์ ๋ ฌํ๋ค. ์ ๋ ฌ๋๋ ๊ธฐ๋ณธ ์์๋ "์ซ์ > ์ํ๋ฒณ ๋๋ฌธ์ > ์ํ๋ฒณ ์๋ฌธ์ > ํ๊ธ" ์์ด๋ค. ์ด ์์๋ String๊ณผ ๊ฐ์ ๋ฌธ์์ด์ด ์ ์ฅ๋๋ ์์๋ฅผ ๋งํ๋ ๊ฒ์ด๋ค.
์ฆ, TreeMap์ ํค๋ฅผ ์ ๋ ฌํ์ฌ ์ ์ฅํ๊ณ , ํค์ ๋ชฉ๋ก์ ๊ฐ์ ธ์์ ์ถ๋ ฅํด๋ณด๋ฉด ์ ๋ ฌ๋ ์์๋๋ก ์ ๊ณต๋๋ ๊ฒ์ ๋ณผ ์ ์๋ค. ๋งค์ฐ ๋ง์ ๋ฐ์ดํฐ๋ฅผ TreeMap์ ์ด์ฉํ์ฌ ๋ณด๊ดํ์ฌ ์ฒ๋ฆฌํ ๋์๋ HashMap๋ณด๋ค๋ ๋๋ฆด ๊ฒ์ด๋ค. ์๋ํ๋ฉด, ํค๊ฐ ์ ๋ ฌ๋๊ธฐ ๋๋ฌธ์ด๋ค. ํ์ง๋ง, 100๊ฑด, 1,000๊ฑด ์ ๋์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๊ณ , ์ ๋ ฌ์ ํด์ผ ํ ํ์๊ฐ ์๋ค๋ฉด, HashMap ๋ณด๋ค๋ TreeMap์ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ ์ ๋ฆฌํ๋ค.
์ด๋ ๊ฒ, TreeMap์ด ํค๋ฅผ ์ ๋ ฌํ๋ ๊ฒ์ SortedMap์ด๋ผ๋ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๊ธฐ ๋๋ฌธ์ด๋ค. SortedMap์ ๊ตฌํํ ํด๋์ค๋ค์ ๋ชจ๋ ํค๊ฐ ์ ๋ ฌ๋์ด ์์ด์ผ๋ง ํ๋ค. ํค๊ฐ ์ ๋ ฌ์ด ๋์์ ๋์ ์ฅ์ ์, ๊ฐ์ฅ ์์ ์๋ ํค(firstKey()), ๊ฐ์ฅ ๋ค์ ์๋ ํค(lastKey()), ํน์ ํค ๋ค์ ์๋ ํค(highterKey()), ํน์ ํค ์์ ์๋ ํค(lowerKey()) ๋ฑ์ ์ ์ ์๋ ๋ฉ์๋๋ฅผ ์ ๊ณตํด ์ค๋ค๋ ๊ฒ์ด๋ค.
'๊ฐ๋ฐ > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ