๐ŸŒˆ [Section1] 16. ์ปฌ๋ ‰์…˜(Collection)

ํ˜„์ฃผยท2022๋…„ 9์›” 14์ผ
0

bootcamp

๋ชฉ๋ก ๋ณด๊ธฐ
16/71

๐Ÿ“• ์˜ค๋Š˜ ๋ฐฐ์šด ๋‚ด์šฉ!

  • ์ปฌ๋ ‰์…˜ ํ”„๋ ˆ์ž„์›Œํฌ
  • List
  • Set
  • Map

โœ๏ธ ์ปฌ๋ ‰์…˜ ํ”„๋ ˆ์ž„์›Œํฌ

  • ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ๋“ค์„ ๊ทธ๋ฃน์œผ๋กœ ๋ฌถ์–ด๋†“์€ ์ปฌ๋ ‰์…˜์„ ๋‹ค๋ฃจ๋Š” ๋ฐ์— ์žˆ์–ด ํŽธ๋ฆฌํ•œ ๋ฉ”์„œ๋“œ๋“ค์„ ๋ฏธ๋ฆฌ ์ •์˜ํ•ด๋†“์€ ๊ฒƒ

  • ํŠน์ • ์ž๋ฃŒ ๊ตฌ์กฐ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ , ์‚ญ์ œํ•˜๊ณ , ์ˆ˜์ •ํ•˜๊ณ , ๊ฒ€์ƒ‰ํ•˜๋Š” ๋“ฑ์˜ ๋™์ž‘์„ ์ˆ˜ํ–‰ํ•˜๋Š” ํŽธ๋ฆฌํ•œ ๋ฉ”์„œ๋“œ๋“ค์„ ์ œ๊ณต

  • ์ฃผ์š” ์ธํ„ฐํŽ˜์ด์Šค๋กœ 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)ํ•˜์—ฌ ๋„ฃ์„ ์ˆ˜ ์žˆ์Œ

โœ” List

  • ๋ฐ์ดํ„ฐ์˜ ์ˆœ์„œ ์œ ์ง€ O, ์ค‘๋ณต ์ €์žฅ O
  • ๊ตฌํ˜„ ํด๋ž˜์Šค : ArrayList, Vector, Stack, LinkedList ๋“ฑ

โœ” Set

  • ๋ฐ์ดํ„ฐ์˜ ์ˆœ์„œ ์œ ์ง€ X, ์ค‘๋ณต ์ €์žฅ X
  • ๊ตฌํ˜„ ํด๋ž˜์Šค : HashSet, TreeSet ๋“ฑ

โœ” Map

  • ํ‚ค(key)์™€ ๊ฐ’(value)์˜ ์Œ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅ
  • ๋ฐ์ดํ„ฐ์˜ ์ˆœ์„œ๊ฐ€ ์œ ์ง€ X, ํ‚ค - ์ค‘๋ณต ์ €์žฅ X / ๊ฐ’ - ์ค‘๋ณต ์ €์žฅ O
    (ํ‚ค๋Š” ๊ฐ’์„ ์‹๋ณ„ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ณ ์œ ํ•œ ๊ฐ’์ด๋ผ ๋ถˆ๊ฐ€๋Šฅ)
  • ๊ตฌํ˜„ ํด๋ž˜์Šค : HashMap, HashTable, TreeMap, Properties ๋“ฑ

โœ”๏ธ 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 ์ธํ„ฐํŽ˜์ด์Šค

  • ๋ฐฐ์—ด๊ณผ ๊ฐ™์ด ๊ฐ์ฒด๋ฅผ ์ผ๋ ฌ๋กœ ๋Š˜์–ด๋†“์€ ๊ตฌ์กฐ

  • ๊ฐ์ฒด๋ฅผ ์ธ๋ฑ์Šค๋กœ ๊ด€๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ์ฒด๋ฅผ ์ €์žฅํ•˜๋ฉด ์ž๋™์œผ๋กœ ์ธ๋ฑ์Šค๊ฐ€ ๋ถ€์—ฌ๋จ

  • ์ปฌ๋ ‰์…˜ ์ธํ„ฐํŽ˜์ด์Šค์˜ ๋ฉ”์„œ๋“œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ ( ์ปฌ๋ ‰์…˜ ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌํ˜„ ํด๋ž˜์Šค์ด๊ธฐ ๋•Œ๋ฌธ )

โœ๏ธ List ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌํ˜„ ํด๋ž˜์Šค

โœ” ArrayList

  • list์˜ ํŠน์„ฑ ๋ชจ๋‘ ์ƒ์† ๋ฐ›์•„ ๊ฐ์ฒด๋ฅผ ์ธ๋ฑ์Šค๋กœ ๊ด€๋ฆฌ

  • ๋ฐ์ดํ„ฐ๋ฅผ ์ˆœ์ฐจ์ ์œผ๋กœ ์ถ”๊ฐ€ํ•˜๊ณ  ์‚ญ์ œํ•  ๋•Œ ๋น„๊ต์  ํšจ์œจ์ 
    ( ๊ฐ์ฒด๋“ค์ด ์—ฐ์†์ ์œผ๋กœ ์ €์žฅ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— )
    but, ์ค‘๊ฐ„์— ์œ„์น˜ํ•œ ๊ฐ์ฒด๋ฅผ ์ถ”๊ฐ€/์‚ญ์ œ ํ•  ๊ฒฝ์šฐ ์†๋„ ์ €ํ•˜
    ( ํ•˜๋‚˜์”ฉ ๊ฐ์ฒด๊ฐ€ ์•ž/๋’ค๋กœ ๋ฐ€๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์— )
    -> LinkedList ์‚ฌ์šฉ์ด ๋” ํšจ์œจ์ 

  • ์ €์žฅ ์šฉ๋Ÿ‰์„ ์ดˆ๊ณผํ•˜์—ฌ ๊ฐ์ฒด๊ฐ€ ์ถ”๊ฐ€๋˜๋ฉด ์ž๋™์œผ๋กœ ์ €์žฅ์šฉ๋Ÿ‰์ด ๋Š˜์–ด๋‚จ (๊ธฐ์กด ์šฉ๋Ÿ‰์˜ 1.5๋ฐฐ ๋งŒํผ)

  • ์ดˆ๊ธฐ ์šฉ๋Ÿ‰์ด ๊ธฐ๋ณธ์ ์œผ๋กœ 10์œผ๋กœ ์ง€์ •

List<ํƒ€์ž… ๋งค๊ฐœ๋ณ€์ˆ˜> ๊ฐ์ฒด๋ช… = new ArrayList<ํƒ€์ž… ๋งค๊ฐœ๋ณ€์ˆ˜>(์ดˆ๊ธฐ ์ €์žฅ ์šฉ๋Ÿ‰);

[์ฐธ๊ณ ]https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html

๐Ÿ’ก ๋ฐฐ์—ด(Array)๊ณผ Arraylist
โ €
1. ๊ณตํ†ต์ 

  • ๋‘˜ ๋‹ค ์ค‘๋ณต๋˜๋Š” ์š”์†Œ ์ €์žฅ ๊ฐ€๋Šฅ
  • ์ธ๋ฑ์Šค๋กœ ๊ด€๋ฆฌ๋จ
    โ €
  1. ์ฐจ์ด์ 
    โ €
    โœ” ๋ฐฐ์—ด
    ๐Ÿ‘‰ ์ดˆ๊ธฐํ™”์‹œ ํฌ๊ธฐ๊ฐ€ ๊ณ ์ •, ํฌ๊ธฐ ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€ -> ์ •ํ•ด์ง„ ๊ธธ์ด์˜ ๋ฐฐ์—ด์„ ๋‹ค ์ฑ„์šฐ๋ฉด ์ƒˆ ๋ฐฐ์—ด์„ ๋งŒ๋“ค์–ด ์ƒˆ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผํ•จ
    ๐Ÿ‘‰ ์ฐธ์กฐํƒ€์ž…, ๊ธฐ๋ณธํƒ€์ž… ๋ชจ๋‘ ์ €์žฅ ๊ฐ€๋Šฅ
    ๐Ÿ‘‰ for loop / for each loop ์œผ๋กœ ์ˆœํšŒ ๊ฐ€๋Šฅ
    โ €
    โœ” Arraylist
    ๐Ÿ‘‰ ์ดˆ๊ธฐํ™”์‹œ ์‚ฌ์ด์ฆˆ๋ฅผ ํ‘œ์‹œํ•˜์ง€ ์•Š์•„๋„ ๋˜์–ด ํฌ๊ธฐ๊ฐ€ ๊ฐ€๋ณ€์  -> ๊ธฐ๋ณธ ์ €์žฅ์šฉ๋Ÿ‰ 10์˜ ๋ฐฐ์—ด์„ ๋‹ค ์ฑ„์šฐ๋ฉด ์ž๋™์œผ๋กœ ์‚ฌ์ด์ฆˆ๊ฐ€ ๋Š˜์–ด๋‚จ
    ๐Ÿ‘‰ ์ฐธ์กฐํƒ€์ž…์˜ ๊ฐ์ฒด ์ฃผ์†Œ๋งŒ ์ €์žฅ
    ๐Ÿ‘‰ iterator ๋กœ ์ˆœํšŒ ๊ฐ€๋Šฅ

โœ” LinkedList

  • list์˜ ํŠน์„ฑ ๋ชจ๋‘ ์ƒ์†๋ฐ›์Œ

  • ๋ชจ๋“  ๋ฐ์ดํ„ฐ๊ฐ€ ๋ถˆ์—ฐ์†์ ์œผ๋กœ ์กด์žฌํ•˜๊ณ  ์ด ๋ฐ์ดํ„ฐ๋“ค์ด ์„œ๋กœ ์—ฐ๊ฒฐ(link)๋˜์–ด ์žˆ์Œ
    (๋ฐฐ์—ด, arraylist์—๋Š” ๋ชจ๋“  ๋ฐ์ดํ„ฐ๊ฐ€ ์—ฐ์†์ ์œผ๋กœ ์กด์žฌ)

  • ๋ฐ์ดํ„ฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์ถ”๊ฐ€, ์‚ญ์ œ, ๋ณ€๊ฒฝํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ
    ( ๊ฐ ์š”์†Œ(node)๋“ค์ด ์„œ๋กœ๊ฐ€ ์„œ๋กœ์˜ ์ฃผ์†Œ๊ฐ’์ด ๋˜์–ด ์—ฐ๊ฒฐ )
    -> ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ•˜๋ ค๋ฉด ์„œ๋กœ์˜ ์ฃผ์†Œ๊ฐ’ ์—ฐ๊ฒฐ์„ ๋Š๊ณ  ๊ทธ๊ฒƒ์„ ๋‹ค๋ฅธ ์š”์†Œ์— ๋ถ™์—ฌ์ฃผ๋ฉด ํ˜ผ์ž ๋‚จ๋Š” ์• ๊ฐ€ ์‚ญ์ œ ๋จ
    ( ๋ฐฐ์—ด์ฒ˜๋Ÿผ ๋ฐ์ดํ„ฐ ๋ณต์‚ฌ ํ›„ ์ด๋™ํ•˜์ง€ ์•Š์•„์„œ ์ฒ˜๋ฆฌ ์†๋„๊ฐ€ ๋น ๋ฆ„)
    ( ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€๋„ ์ƒˆ ์š”์†Œ ์ด์ „ ์š”์†Œ์™€ ๋‹ค์Œ ์š”์†Œ๋ฅผ ์ƒˆ ์š”์†Œ์™€ ๊ฐ๊ฐ ์—ฐ๊ฒฐํ•ด์ฃผ๋ฉด ๋จ )

  • but, ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰ํ•  ๋•Œ๋Š” ๋งจ ์•ž๋ถ€ํ„ฐ ๊ฒ€์‚ฌํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆผ, ์ˆœ์ฐจ์ ์œผ๋กœ ์ถ”๊ฐ€, ์‚ญ์ œ ํ•˜๋Š” ๊ฒƒ๋„ arraylist์— ๋น„ํ•ด ๋Š๋ฆผ

โœ๏ธ Iterator

  • ์ปฌ๋ ‰์…˜์— ์ €์žฅ๋œ ์š”์†Œ๋“ค์„ ์ˆœ์ฐจ์ ์œผ๋กœ ์ฝ์–ด์˜ค๋Š” ๋ฐ˜๋ณต์ž

  • Iterator์˜ ์ปฌ๋ ‰์…˜ ์ˆœํšŒ๊ธฐ๋Šฅ -> Iterator ์ธํ„ฐํŽ˜์ด์Šค์— ์ •์˜

  • Collection ์ธํ„ฐํŽ˜์ด์Šค์— ์ •์˜๋œ iterator() ํ˜ธ์ถœํ•˜๋ฉด Iterator ํƒ€์ž…์˜ ์ธ์Šคํ„ด์Šค๊ฐ€ ๋ฐ˜ํ™˜
    => Collection ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค๋“ค์€ iterator() ๋ฉ”์„œ๋“œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

    Iterator<ํƒ€์ž… ํŒŒ๋ผ๋ฏธํ„ฐ> ๋ณ€์ˆ˜๋ช… = ์•ž์— ์„ ์–ธ๋œ list/set์˜ ์ด๋ฆ„.iterator();

โ— ์œ„์—์„œ ์ฒซ๋ฒˆ์งธ Iterator๋Š” Iterator ์ธํ„ฐํŽ˜์ด์Šค / ๋’ค์˜ .iterator()๋Š” ์ง„์งœ iterator ๊ฐ์ฒด

โœ” Iterator ์ธํ„ฐํŽ˜์ด์Šค์— ์ •์˜๋œ ๋ฉ”์„œ๋“œ

  • hasNext() - ์ฝ์–ด์˜ฌ ๊ฐ์ฒด๊ฐ€ ๋‚จ์•„ ์žˆ์œผ๋ฉด true๋ฅผ ๋ฆฌํ„ด, ์—†์œผ๋ฉด false ๋ฆฌํ„ด

  • next() - ์ปฌ๋ ‰์…˜์—์„œ ํ•˜๋‚˜์˜ ๊ฐ์ฒด๋ฅผ ์ฝ์–ด์˜ด
    ( ์ด ๋•Œ, hasNext()๋กœ ์ฝ์–ด์˜ฌ ๋‹ค์Œ ์š”์†Œ๊ฐ€ ์žˆ๋Š”์ง€ ๋จผ์ € ํ™•์ธ ํ›„ next() ํ˜ธ์ถœ )

  • remove() - next()๋ฅผ ํ†ตํ•ด ์ฝ์–ด์˜จ ๊ฐ์ฒด ์‚ญ์ œ
    ( ์ด ๋•Œ, next()๋ฅผ ํ˜ธ์ถœํ•œ ๋‹ค์Œ์— remove() ํ˜ธ์ถœ )


โœ๏ธ Set ์ธํ„ฐํŽ˜์ด์Šค

  • ์ค‘๋ณต ํ—ˆ์šฉ X, ์ €์žฅ ์ˆœ์„œ ์œ ์ง€X (List์™€ ๋ฐ˜๋Œ€)

โœ๏ธ Set ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌํ˜„ ํด๋ž˜์Šค

โœ” HashSet

  • Set์˜ ํŠน์„ฑ ๊ทธ๋Œ€๋กœ ๋ฌผ๋ ค๋ฐ›์Œ

  • ํ•ดhashCode() & equals() ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ์˜ ์ค‘๋ณต์„ ๊ฒ€์‚ฌ

  • hashCode() & equals() ์‚ฌ์šฉํ•˜์—ฌ ์ค‘๋ณต๊ฐ์ฒด๋ฅผ ์–ด๋–ป๊ฒŒ ์ •์˜ํ•  ๊ฒƒ์ธ์ง€ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Œ
    ( ๋ชจ๋“  ํ•ด์‹œ์ฝ”๋“œ๋ฅผ ๊ฐ€์ ธ์™€ ๋น„๊ตํ•˜๋ฉด์„œ ๋‹ค๋ฅด๋ฉด ๋‹ค๋ฅธ ๊ฐ์ฒด๋กœ ๊ฐ„์ฃผํ•˜์—ฌ ์ €์žฅํ•˜๊ณ , ๊ฐ™์œผ๋ฉด equals๋กœ ๋น„๊ตํ•ด true ๋ฉด ์ค‘๋ณต ๊ฐ์ฒด๋กœ ๊ฐ„์ฃผํ•˜์—ฌ ์ €์žฅ ์•ˆํ•จ )
    Ex. ๋กœ๋˜ ๋ฒˆํ˜ธ ๋ฝ‘์„ ๋•Œ ์ค‘๋ณต๋˜๋ฉด ๋‹ค์‹œ ๋Œ์•„์„œ ์ˆ˜ ๋ฝ‘ํž˜

โœ” TreeSet

  • Set์˜ ํŠน์„ฑ์„ ๊ทธ๋Œ€๋กœ ๋ฌผ๋ ค๋ฐ›์Œ ( but, ๊ฐ’๋“ค ์ž๋™ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ ํ•ด์คŒ )

  • ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ์ฒด๋ฅผ ์ €์žฅ

๐Ÿ’ก ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ๋ž€?

  • ํ•œ ๋…ธ๋“œ์— 2๊ฐœ์˜ ๋…ธ๋“œ๊ฐ€ ์ญ‰ ์—ฐ๊ฒฐ๋˜์–ด์žˆ๋Š” ๊ตฌ์กฐ
  • ํ•œ ๋ถ€๋ชจ๋…ธ๋“œ์˜ ๋ชจ๋“  ์™ผ์ชฝ ์ž์‹์€ ๋ถ€๋ชจ ๋…ธ๋“œ๋ณด๋‹ค ๊ฐ’์ด ์ž‘์•„์•ผํ•˜๊ณ  ์˜ค๋ฅธ์ชฝ ์ž์‹์€ ๋ถ€๋ชจ๋…ธ๋“œ๋ณด๋‹ค ๊ฐ’์ด์ปค์•ผ ํ•จ
    โ €
    Ex. 8 5 9 1 6 ์„ treeset์œผ๋กœ ์ €์žฅํ•˜๋ฉด
    ๋งจ ์œ„ ๋ถ€๋ชจ ๋…ธ๋“œ 8, ๊ทธ์˜ ์™ผ์ชฝ ์ž์‹ 5, ๊ทธ์˜ ์˜ค๋ฅธ์ชฝ ์ž์‹ 9, ์™ผ์ชฝ ์ž์‹ 5์˜ ์ž์‹ ์ค‘ ์™ผ์ชฝ ์ž์‹์— 1, ์˜ค๋ฅธ์ชฝ ์ž์‹์— 6 ์ €์žฅ

โœ๏ธ Map<k, v> ์ธํ„ฐํŽ˜์ด์Šค

  • ํ‚ค(key)์™€ ๊ฐ’(value)์˜ ์Œ์œผ๋กœ ๊ตฌ์„ฑ๋œ ๊ฐ์ฒด๋ฅผ ์ €์žฅํ•˜๋Š” ๊ตฌ์กฐ (๊ทธ ๊ฐ์ฒด์˜ ์ด๋ฆ„์ด Entry)

  • Entry ๊ฐ์ฒด์— ํ‚ค์™€ ๊ฐ’์„ ๊ฐ๊ฐ Key ๊ฐ์ฒด์™€ Value ๊ฐ์ฒด๋กœ ์ €์žฅ

๐Ÿ‘‰ map ์ธํ„ฐํŽ˜์ด์Šค ์•ˆ์— ํ‚ค ๊ฐ์ฒด์™€ ๊ฐ’ ๊ฐ์ฒด ์ด๋ฃจ์–ด์ง„ ์—”ํŠธ๋ฆฌ ๊ฐ์ฒด๋“ค์ด ์žˆ๋‹ค

  • key๋Š” ์ค‘๋ณต ์ €์žฅ ํ—ˆ์šฉ X -> ๊ณ ์œ ํ•œ ๊ฒƒ์ด์—ฌ์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ค‘๋ณต ํ—ˆ์šฉ๋˜์ง€ ์•Š์Œ
    (๊ธฐ์กด ํ‚ค์— ๊ฐ’์„ ์ƒˆ๋กœ ์ €์žฅํ•˜๋ฉด ๊ธฐ์กด ํ‚ค ๊ฐ’์ด ์ƒˆ๋กœ์šด ๊ฐ’์œผ๋กœ ๋ณ€ํ•จ)

  • value๋Š” ์ค‘๋ณต ์ €์žฅ ํ—ˆ์šฉ O -> key๋กœ ์‹๋ณ„ ๊ฐ€๋Šฅํ•˜๊ธฐ์— ์ค‘๋ณต ํ—ˆ์šฉ๋จ

โœ๏ธ Map ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌํ˜„ ํด๋ž˜์Šค

โœ” 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)

โœ” HashTable

  • HashMap์ด HashTable์˜ ์ƒˆ๋กœ์šด ๋ฒ„์ „์ด๋ผ๊ณ  ์ƒ๊ฐ

ํ—ค์‹ฑ์„ ๋งž์ท„๋‹ค -> ์–ด๋–ค ๋ฐ์ดํ„ฐ๋ฅผ ์–ด๋–ป๊ฒŒ ๋ฐ”๊พธ๋Š” ๊ฒƒ ์–ด๋–ป๊ฒŒ?
์–ด๋–ค ํ‚ค ๊ฐ’์ด ํ—ค์‹ฑ ํ•จ์ˆ˜๋ฅผ ๊ฑฐ์น˜๋ฉด ์ฃผ์†Œ๊ฐ’์ด ๋˜๊ณ  ๊ฑฐ๊ธฐ์— ๊ทธ ๋ฐธ๋ฅ˜ ๊ฐ์ฒด๊ฐ€ ์ €์žฅ๋จ
ํ•œ๋ฒˆ ๊ฐ’์„ ์ €์žฅํ•˜๊ณ  ์ดํ›„ ๊ฐ™์€ ํ‚ค์— ๋‹ค๋ฅธ ๊ฐ’์„ ๋„ฃ์œผ๋ฉด ๋ฎ์–ด์”Œ์›Œ์ง
ํ•ด์‹œ๋งต ์ˆœํšŒ ํ•˜๋ ค๋ฉด ์ดํ„ฐ๋ ˆ์ดํ„ฐ ๋ชป์“ฐ๋‹ˆ๊นŒ ์…‹์œผ๋กœ ๋ณ€ํ˜•ํ•ด์„œ ์ˆœํšŒ ์‹œ์ผœ์•ผํ•จ


๐ŸŒˆ ๋Š๋‚€์ 

์‚ฌ์‹ค ๋ณด๋ฉด์„œ ์–ด๋ ค์›Œ์„œ ์ด๊ฒŒ ๋ฌด์Šจ ๋ง์ธ์ง€ ์‹ถ๊ณ  ์ฝ”๋“œ๋ฅผ ์ณ๋ณด๋ฉด์„œ ์ดํ•ดํ•˜๋ฉด ๊ทธ๋ž˜๋„ ์ดํ•ด๊ฐ€ ์ข€ ๋” ์ž˜ ๋˜์ง€๋งŒ ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ ค์„œ ์คŒ์„ธ์…˜ ์‹œ๊ฐ„ 4์‹œ ๋ฐ˜ ์ „๊นŒ์ง€ ์™„์ „ํžˆ ํ•™์Šตํ•˜์ง€ ๋ชปํ•ด ๋๋‚˜๊ณ  ๋‚˜๋จธ์ง€๋ฅผ ํ•™์Šตํ–ˆ๋‹คใ… ใ…  ํ•˜๋ฉด์„œ ์ด๊ฑธ ์–ด๋–ป๊ฒŒ ์“ฐ๋ผ๋Š” ๊ฑฐ์ง€? ํ•˜๋Š” ์˜๋ฌธ์ ์ด ๊ต‰์žฅํžˆ ๋งŽ์•˜๋Š”๋ฐ ๊ทธ๋ž˜๋„ ํŽ˜์–ด์™€ ๋ฌธ์ œ๋ฅผ ํ’€๋ฉด์„œ ๋ฐฐ์šด ๋‚ด์šฉ์„ ๋‹ค์‹œ ์ฐพ์•„๋ณด๊ณ  ์จ์„œ ์‘์šฉ์„ ํ•˜๋‹ค ๋ณด๋‹ˆ ๋จธ๋ฆฌ์†์— ๋” ์ž˜ ๋“ค์–ด์™”๋‹ค!! ํŽ˜์–ดํ•™์Šต ๋„ˆ๋ฌด ์ข‹์€ ๊ฒƒ ๊ฐ™๋‹ค ใ…Žใ…Ž ๋ฌผ๋ก  ๋‚ด๊ฐ€ ์ข€ ์ž˜ ํ•  ๋•Œ๋งŒ..! ์–ด์ œ๋„ ๋ฏธ๋ฆฌ ๊ณต๋ถ€๋ฅผ ์ข€ ํ•ด์„œ ์˜ค๋Š˜ ๋” ์ž˜ ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค ์•ž์œผ๋กœ๋„ ๋ฏธ๋ฆฌ๋ฏธ๋ฆฌ ์˜ˆ์Šตํ•ด๋‘ฌ์•ผ๊ฒ ๋‹ค

0๊ฐœ์˜ ๋Œ“๊ธ€