์ฌ๋ฌ ๋ฐ์ดํฐ๋ค์ ๊ทธ๋ฃน์ผ๋ก ๋ฌถ์ด๋์ ์ปฌ๋ ์ ์ ๋ค๋ฃจ๋ ๋ฐ์ ์์ด ํธ๋ฆฌํ ๋ฉ์๋๋ค์ ๋ฏธ๋ฆฌ ์ ์ํด๋์ ๊ฒ
ํน์ ์๋ฃ ๊ตฌ์กฐ์ ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ๊ณ , ์ญ์ ํ๊ณ , ์์ ํ๊ณ , ๊ฒ์ํ๋ ๋ฑ์ ๋์์ ์ํํ๋ ํธ๋ฆฌํ ๋ฉ์๋๋ค์ ์ ๊ณต
์ฃผ์ ์ธํฐํ์ด์ค๋ก List, Set, Map ์ ๊ณต
( List์ Set์ ๊ณตํต์ ์ด ๋ง์ ๊ทธ ๊ณตํต์ ์ด ์ถ์ถ๋์ด Collection ์ธํฐํ์ด์ค๋ก ๋ฌถ์ )
( ๊ทธ ๋ค์ ๊ฒ๋ค์ ๊ฐ ์ธํฐํ์ด์ค๋ค์ ๊ตฌํํ ํด๋์ค๋ค )
โ ์ปฌ๋ ์ ์๋ ๊ธฐ๋ณธํ์ ์ ๋ฃ์ ์ ์์, ๊ฐ์ฒด๋ง ์ ์ฅ ๊ฐ๋ฅ, ์ซ์๊ฐ ๋ค์ด๊ฐ๋ ๊ฒ์ ๊ธฐ๋ณธํ์ ์ด ์๋ ๋ํผํด๋์ค๊ฐ ๋ค์ด๊ฐ๋ ๊ฒ
๐ก ๊ธฐ๋ณธํ ๊ณผ ๋ํผํด๋์ค
- ๊ธฐ๋ณธํ : ๋ณ์ ํ์ ์ ๋ฐ์ดํฐ ( ๊ธฐ๋ณธํ ์๋ฃํ )
-> data์ type์ ๋ฐ๋ผ ๊ฐ์ด ์ ์ฅ๋ ๊ณต๊ฐ์ ํฌ๊ธฐ์ ํ์์ ์ ์ํ ๊ฒ- ๋ํผํด๋์ค (Wrapper class) : ๊ธฐ๋ณธํ์ ๊ฐ์ฒด๋ก ๋ค๋ฃจ๊ธฐ ์ํด ์ฌ์ฉ ( ์ฐธ์กฐํ ์๋ฃํ )
โ
โ Boxing = ์๋ฃํ ๋ณ์ ํ์ ๋ฐ์ดํฐ โ ๋ํผ ํด๋์ค
โint -> Integer
์ ๊ฒฝ์ฐ,Integer a = new Integer(int๊ฐ)
โ Unboxing = ๋ํผ ํด๋์ค โ ์๋ฃํ ๋ณ์ ํ์ ๋ฐ์ดํฐ
โInteger -> int
์ ๊ฒฝ์ฐ,int b = a.intValue();
โ
Ex. ์ด๋ค ๋ฉ์๋๊ฐ ๋งค๊ฐ๋ณ์๋ฅผ ๊ฐ์ฒด ํํ๋ก๋ง ๋ฐ๋๋ค๊ณ ํ ๋ ๊ธฐ๋ณธํ์ ์ ๋ํผํด๋์ค๋ก ๊ฐ์ฒดํ(Boxing)ํ์ฌ ๋ฃ์ ์ ์์
โ๏ธ Collection ์ธํฐํ์ด์ค์ ๋ฉ์๋
( List์ Set ์ธํฐํ์ด์ค๋ ์ปฌ๋ ์ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๊ธฐ ๋๋ฌธ์ ์๋์ ๋ฉ์๋ ๊ณตํต์ ์ผ๋ก ์ฌ์ฉ ๊ฐ๋ฅ )
( Map์ ์ฌ์ฉ ๋ถ๊ฐ, ๋ฐ๋ก ๊ฐ์ง๊ณ ์๋ ๋ฉ์๋๋ง ์ฌ์ฉ)
add(Object o)
,addAll(Collection c)
contains(Object o)
,containsAll(Collection c)
equals(Object o)
โ isEmpty()
โ iterator()
size()
clear()
โ remove(Object o)
,removeAll(Collection c)
retainAll(Collection c)
toArray()
toArray(Object[] a)
๋ฐฐ์ด๊ณผ ๊ฐ์ด ๊ฐ์ฒด๋ฅผ ์ผ๋ ฌ๋ก ๋์ด๋์ ๊ตฌ์กฐ
๊ฐ์ฒด๋ฅผ ์ธ๋ฑ์ค๋ก ๊ด๋ฆฌํ๊ธฐ ๋๋ฌธ์ ๊ฐ์ฒด๋ฅผ ์ ์ฅํ๋ฉด ์๋์ผ๋ก ์ธ๋ฑ์ค๊ฐ ๋ถ์ฌ๋จ
์ปฌ๋ ์ ์ธํฐํ์ด์ค์ ๋ฉ์๋ ์ฌ์ฉ ๊ฐ๋ฅ ( ์ปฌ๋ ์ ์ธํฐํ์ด์ค ๊ตฌํ ํด๋์ค์ด๊ธฐ ๋๋ฌธ )
list์ ํน์ฑ ๋ชจ๋ ์์ ๋ฐ์ ๊ฐ์ฒด๋ฅผ ์ธ๋ฑ์ค๋ก ๊ด๋ฆฌ
๋ฐ์ดํฐ๋ฅผ ์์ฐจ์ ์ผ๋ก ์ถ๊ฐํ๊ณ ์ญ์ ํ ๋ ๋น๊ต์ ํจ์จ์
( ๊ฐ์ฒด๋ค์ด ์ฐ์์ ์ผ๋ก ์ ์ฅ๋์ด ์๊ธฐ ๋๋ฌธ์ )
but, ์ค๊ฐ์ ์์นํ ๊ฐ์ฒด๋ฅผ ์ถ๊ฐ/์ญ์ ํ ๊ฒฝ์ฐ ์๋ ์ ํ
( ํ๋์ฉ ๊ฐ์ฒด๊ฐ ์/๋ค๋ก ๋ฐ๋ฆฌ๊ธฐ ๋๋ฌธ์ )
-> LinkedList ์ฌ์ฉ์ด ๋ ํจ์จ์
์ ์ฅ ์ฉ๋์ ์ด๊ณผํ์ฌ ๊ฐ์ฒด๊ฐ ์ถ๊ฐ๋๋ฉด ์๋์ผ๋ก ์ ์ฅ์ฉ๋์ด ๋์ด๋จ (๊ธฐ์กด ์ฉ๋์ 1.5๋ฐฐ ๋งํผ)
์ด๊ธฐ ์ฉ๋์ด ๊ธฐ๋ณธ์ ์ผ๋ก 10์ผ๋ก ์ง์
List<ํ์ ๋งค๊ฐ๋ณ์> ๊ฐ์ฒด๋ช = new ArrayList<ํ์ ๋งค๊ฐ๋ณ์>(์ด๊ธฐ ์ ์ฅ ์ฉ๋);
[์ฐธ๊ณ ]https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html
๐ก ๋ฐฐ์ด(Array)๊ณผ Arraylist
โ
1. ๊ณตํต์
- ๋ ๋ค ์ค๋ณต๋๋ ์์ ์ ์ฅ ๊ฐ๋ฅ
- ์ธ๋ฑ์ค๋ก ๊ด๋ฆฌ๋จ
โ
- ์ฐจ์ด์
โ
โ ๋ฐฐ์ด
๐ ์ด๊ธฐํ์ ํฌ๊ธฐ๊ฐ ๊ณ ์ , ํฌ๊ธฐ ๋ณ๊ฒฝ ๋ถ๊ฐ -> ์ ํด์ง ๊ธธ์ด์ ๋ฐฐ์ด์ ๋ค ์ฑ์ฐ๋ฉด ์ ๋ฐฐ์ด์ ๋ง๋ค์ด ์ ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํด์ผํจ
๐ ์ฐธ์กฐํ์ , ๊ธฐ๋ณธํ์ ๋ชจ๋ ์ ์ฅ ๊ฐ๋ฅ
๐ for loop / for each loop ์ผ๋ก ์ํ ๊ฐ๋ฅ
โ
โ Arraylist
๐ ์ด๊ธฐํ์ ์ฌ์ด์ฆ๋ฅผ ํ์ํ์ง ์์๋ ๋์ด ํฌ๊ธฐ๊ฐ ๊ฐ๋ณ์ -> ๊ธฐ๋ณธ ์ ์ฅ์ฉ๋ 10์ ๋ฐฐ์ด์ ๋ค ์ฑ์ฐ๋ฉด ์๋์ผ๋ก ์ฌ์ด์ฆ๊ฐ ๋์ด๋จ
๐ ์ฐธ์กฐํ์ ์ ๊ฐ์ฒด ์ฃผ์๋ง ์ ์ฅ
๐ iterator ๋ก ์ํ ๊ฐ๋ฅ
list์ ํน์ฑ ๋ชจ๋ ์์๋ฐ์
๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ๋ถ์ฐ์์ ์ผ๋ก ์กด์ฌํ๊ณ ์ด ๋ฐ์ดํฐ๋ค์ด ์๋ก ์ฐ๊ฒฐ(link)๋์ด ์์
(๋ฐฐ์ด, arraylist์๋ ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ์ฐ์์ ์ผ๋ก ์กด์ฌ)
๋ฐ์ดํฐ๋ฅผ ํจ์จ์ ์ผ๋ก ์ถ๊ฐ, ์ญ์ , ๋ณ๊ฒฝํ๊ธฐ ์ํด ์ฌ์ฉ
( ๊ฐ ์์(node)๋ค์ด ์๋ก๊ฐ ์๋ก์ ์ฃผ์๊ฐ์ด ๋์ด ์ฐ๊ฒฐ )
-> ๋ฐ์ดํฐ๋ฅผ ์ญ์ ํ๋ ค๋ฉด ์๋ก์ ์ฃผ์๊ฐ ์ฐ๊ฒฐ์ ๋๊ณ ๊ทธ๊ฒ์ ๋ค๋ฅธ ์์์ ๋ถ์ฌ์ฃผ๋ฉด ํผ์ ๋จ๋ ์ ๊ฐ ์ญ์ ๋จ
( ๋ฐฐ์ด์ฒ๋ผ ๋ฐ์ดํฐ ๋ณต์ฌ ํ ์ด๋ํ์ง ์์์ ์ฒ๋ฆฌ ์๋๊ฐ ๋น ๋ฆ)
( ๋ฐ์ดํฐ ์ถ๊ฐ๋ ์ ์์ ์ด์ ์์์ ๋ค์ ์์๋ฅผ ์ ์์์ ๊ฐ๊ฐ ์ฐ๊ฒฐํด์ฃผ๋ฉด ๋จ )
but, ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ํ ๋๋ ๋งจ ์๋ถํฐ ๊ฒ์ฌํด์ผํ๊ธฐ ๋๋ฌธ์ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆผ, ์์ฐจ์ ์ผ๋ก ์ถ๊ฐ, ์ญ์ ํ๋ ๊ฒ๋ arraylist์ ๋นํด ๋๋ฆผ
์ปฌ๋ ์ ์ ์ ์ฅ๋ ์์๋ค์ ์์ฐจ์ ์ผ๋ก ์ฝ์ด์ค๋ ๋ฐ๋ณต์
Iterator์ ์ปฌ๋ ์ ์ํ๊ธฐ๋ฅ -> Iterator ์ธํฐํ์ด์ค์ ์ ์
Collection ์ธํฐํ์ด์ค์ ์ ์๋ iterator() ํธ์ถํ๋ฉด Iterator ํ์
์ ์ธ์คํด์ค๊ฐ ๋ฐํ
=> Collection ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ํด๋์ค๋ค์ iterator() ๋ฉ์๋ ์ฌ์ฉ ๊ฐ๋ฅ
Iterator<ํ์ ํ๋ผ๋ฏธํฐ> ๋ณ์๋ช = ์์ ์ ์ธ๋ list/set์ ์ด๋ฆ.iterator();
โ ์์์ ์ฒซ๋ฒ์งธ Iterator
๋ Iterator ์ธํฐํ์ด์ค / ๋ค์ .iterator()
๋ ์ง์ง iterator ๊ฐ์ฒด
hasNext()
- ์ฝ์ด์ฌ ๊ฐ์ฒด๊ฐ ๋จ์ ์์ผ๋ฉด true๋ฅผ ๋ฆฌํด, ์์ผ๋ฉด false ๋ฆฌํด
next()
- ์ปฌ๋ ์
์์ ํ๋์ ๊ฐ์ฒด๋ฅผ ์ฝ์ด์ด
( ์ด ๋, hasNext()๋ก ์ฝ์ด์ฌ ๋ค์ ์์๊ฐ ์๋์ง ๋จผ์ ํ์ธ ํ next() ํธ์ถ )
remove()
- next()๋ฅผ ํตํด ์ฝ์ด์จ ๊ฐ์ฒด ์ญ์
( ์ด ๋, next()๋ฅผ ํธ์ถํ ๋ค์์ remove() ํธ์ถ )
Set์ ํน์ฑ ๊ทธ๋๋ก ๋ฌผ๋ ค๋ฐ์
ํดhashCode() & equals() ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ์ ์ค๋ณต์ ๊ฒ์ฌ
hashCode() & equals() ์ฌ์ฉํ์ฌ ์ค๋ณต๊ฐ์ฒด๋ฅผ ์ด๋ป๊ฒ ์ ์ํ ๊ฒ์ธ์ง ๊ตฌํํ ์ ์์
( ๋ชจ๋ ํด์์ฝ๋๋ฅผ ๊ฐ์ ธ์ ๋น๊ตํ๋ฉด์ ๋ค๋ฅด๋ฉด ๋ค๋ฅธ ๊ฐ์ฒด๋ก ๊ฐ์ฃผํ์ฌ ์ ์ฅํ๊ณ , ๊ฐ์ผ๋ฉด equals๋ก ๋น๊ตํด true ๋ฉด ์ค๋ณต ๊ฐ์ฒด๋ก ๊ฐ์ฃผํ์ฌ ์ ์ฅ ์ํจ )
Ex. ๋ก๋ ๋ฒํธ ๋ฝ์ ๋ ์ค๋ณต๋๋ฉด ๋ค์ ๋์์ ์ ๋ฝํ
Set์ ํน์ฑ์ ๊ทธ๋๋ก ๋ฌผ๋ ค๋ฐ์ ( but, ๊ฐ๋ค ์๋ ์ค๋ฆ์ฐจ์ ์ ๋ ฌ ํด์ค )
์ด์ง ํ์ ํธ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ฒด๋ฅผ ์ ์ฅ
๐ก ์ด์ง ํ์ ํธ๋ฆฌ๋?
- ํ ๋ ธ๋์ 2๊ฐ์ ๋ ธ๋๊ฐ ์ญ ์ฐ๊ฒฐ๋์ด์๋ ๊ตฌ์กฐ
- ํ ๋ถ๋ชจ๋ ธ๋์ ๋ชจ๋ ์ผ์ชฝ ์์์ ๋ถ๋ชจ ๋ ธ๋๋ณด๋ค ๊ฐ์ด ์์์ผํ๊ณ ์ค๋ฅธ์ชฝ ์์์ ๋ถ๋ชจ๋ ธ๋๋ณด๋ค ๊ฐ์ด์ปค์ผ ํจ
โ
Ex. 8 5 9 1 6 ์ treeset์ผ๋ก ์ ์ฅํ๋ฉด
๋งจ ์ ๋ถ๋ชจ ๋ ธ๋ 8, ๊ทธ์ ์ผ์ชฝ ์์ 5, ๊ทธ์ ์ค๋ฅธ์ชฝ ์์ 9, ์ผ์ชฝ ์์ 5์ ์์ ์ค ์ผ์ชฝ ์์์ 1, ์ค๋ฅธ์ชฝ ์์์ 6 ์ ์ฅ
ํค(key)์ ๊ฐ(value)์ ์์ผ๋ก ๊ตฌ์ฑ๋ ๊ฐ์ฒด๋ฅผ ์ ์ฅํ๋ ๊ตฌ์กฐ (๊ทธ ๊ฐ์ฒด์ ์ด๋ฆ์ด Entry)
Entry ๊ฐ์ฒด์ ํค์ ๊ฐ์ ๊ฐ๊ฐ Key ๊ฐ์ฒด์ Value ๊ฐ์ฒด๋ก ์ ์ฅ
๐ map ์ธํฐํ์ด์ค ์์ ํค ๊ฐ์ฒด์ ๊ฐ ๊ฐ์ฒด ์ด๋ฃจ์ด์ง ์ํธ๋ฆฌ ๊ฐ์ฒด๋ค์ด ์๋ค
key๋ ์ค๋ณต ์ ์ฅ ํ์ฉ X -> ๊ณ ์ ํ ๊ฒ์ด์ฌ์ผ ํ๊ธฐ ๋๋ฌธ์ ์ค๋ณต ํ์ฉ๋์ง ์์
(๊ธฐ์กด ํค์ ๊ฐ์ ์๋ก ์ ์ฅํ๋ฉด ๊ธฐ์กด ํค ๊ฐ์ด ์๋ก์ด ๊ฐ์ผ๋ก ๋ณํจ)
value๋ ์ค๋ณต ์ ์ฅ ํ์ฉ O -> key๋ก ์๋ณ ๊ฐ๋ฅํ๊ธฐ์ ์ค๋ณต ํ์ฉ๋จ
โ HashMap
HashMap<keyํ์ , valueํ์ > ๋ณ์๋ช = new HashMap<>();
ํด์ฑ(Hashing)์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅ
๐ก ํด์ฑ์ด๋?
- ํค(Key) ๊ฐ์ ํด์ ํจ์(Hash Function)๋ผ๋ ์์์ ๋์ ์์ผ ๊ณ์ฐํ ํ, ๋์จ ๊ฒฐ๊ณผ๋ฅผ ์ฃผ์๋ก ์ฌ์ฉํ์ฌ ๋ฐ๋ก ๊ฐ(Value)์ ์ ๊ทผํ๊ฒ ํ ์ ํ๋ ๋ฐฉ๋ฒ
- ํด์ ํจ์๋ฅผ ํตํด ์ ์ฅ๋๋ ์์น๊ฐ ๊ฒฐ์ ๋๋ฏ๋ก ์ฌ์ฉ์๋ ์์น, ์์ ๋ชจ๋ ์ ์ ์์
๋ง์ ์์ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ํ๊ธฐ ์ข์
โ Map์ ํค์ ๊ฐ์ ์์ผ๋ก ์ ์ฅํ๊ธฐ ๋๋ฌธ์ iterator() ์ง์ ํธ์ถ ๋ถ๊ฐ
=> keySet() ์ด๋ entrySet() ๋ฉ์๋๋ฅผ ์ด์ฉํด Set ํํ๋ก ๋ฐํ๋ ์ปฌ๋ ์
์ iterator()๋ฅผ ํธ์ถํ์ฌ ๋ฐ๋ณต์๋ฅผ ๋ง๋ ํ, ๋ฐ๋ณต์๋ฅผ ํตํด ์ํ ๊ฐ๋ฅ
โ๏ธ keySet() - ๋ชจ๋ ํค๋ค์ set์ผ๋ก ๋ณํํ์ฌ ์ ์ฅ โฌ๏ธ
Set<keyํ์ > ๋ณ์๋ช = hashMap๋ณ์๋ช .keySet();
โ๏ธ entrySet() - ๋ชจ๋ ๊ฐ์ฒด ์์ฒด๋ฅผ set์ผ๋ก ๋ณํํ์ฌ ์ ์ฅ โฌ๏ธ
(Entry ๊ฐ์ฒด - Map ์ธํฐํ์ด์ค ๋ด๋ถ์ Entry ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํ (Map.Entry ์ธํฐํ์ด์ค))
Set<Map.Entry<keyํ์ , valueํ์ >> ๋ณ์๋ช = hashMap๋ณ์๋ช .entrySet();
โ๏ธ HashMap ํด๋์ค์ ๋ฉ์๋
equals(Object o)
getKey()
getValue()
hashCode()
setValue(Object value)
ํค์ฑ์ ๋ง์ท๋ค -> ์ด๋ค ๋ฐ์ดํฐ๋ฅผ ์ด๋ป๊ฒ ๋ฐ๊พธ๋ ๊ฒ ์ด๋ป๊ฒ?
์ด๋ค ํค ๊ฐ์ด ํค์ฑ ํจ์๋ฅผ ๊ฑฐ์น๋ฉด ์ฃผ์๊ฐ์ด ๋๊ณ ๊ฑฐ๊ธฐ์ ๊ทธ ๋ฐธ๋ฅ ๊ฐ์ฒด๊ฐ ์ ์ฅ๋จ
ํ๋ฒ ๊ฐ์ ์ ์ฅํ๊ณ ์ดํ ๊ฐ์ ํค์ ๋ค๋ฅธ ๊ฐ์ ๋ฃ์ผ๋ฉด ๋ฎ์ด์์์ง
ํด์๋งต ์ํ ํ๋ ค๋ฉด ์ดํฐ๋ ์ดํฐ ๋ชป์ฐ๋๊น ์
์ผ๋ก ๋ณํํด์ ์ํ ์์ผ์ผํจ
์ฌ์ค ๋ณด๋ฉด์ ์ด๋ ค์์ ์ด๊ฒ ๋ฌด์จ ๋ง์ธ์ง ์ถ๊ณ ์ฝ๋๋ฅผ ์ณ๋ณด๋ฉด์ ์ดํดํ๋ฉด ๊ทธ๋๋ ์ดํด๊ฐ ์ข ๋ ์ ๋์ง๋ง ์๊ฐ์ด ์ค๋ ๊ฑธ๋ ค์ ์ค์ธ์ ์๊ฐ 4์ ๋ฐ ์ ๊น์ง ์์ ํ ํ์ตํ์ง ๋ชปํด ๋๋๊ณ ๋๋จธ์ง๋ฅผ ํ์ตํ๋คใ ใ ํ๋ฉด์ ์ด๊ฑธ ์ด๋ป๊ฒ ์ฐ๋ผ๋ ๊ฑฐ์ง? ํ๋ ์๋ฌธ์ ์ด ๊ต์ฅํ ๋ง์๋๋ฐ ๊ทธ๋๋ ํ์ด์ ๋ฌธ์ ๋ฅผ ํ๋ฉด์ ๋ฐฐ์ด ๋ด์ฉ์ ๋ค์ ์ฐพ์๋ณด๊ณ ์จ์ ์์ฉ์ ํ๋ค ๋ณด๋ ๋จธ๋ฆฌ์์ ๋ ์ ๋ค์ด์๋ค!! ํ์ดํ์ต ๋๋ฌด ์ข์ ๊ฒ ๊ฐ๋ค ใ ใ ๋ฌผ๋ก ๋ด๊ฐ ์ข ์ ํ ๋๋ง..! ์ด์ ๋ ๋ฏธ๋ฆฌ ๊ณต๋ถ๋ฅผ ์ข ํด์ ์ค๋ ๋ ์ ํ ์ ์์๋ค ์์ผ๋ก๋ ๋ฏธ๋ฆฌ๋ฏธ๋ฆฌ ์์ตํด๋ฌ์ผ๊ฒ ๋ค