๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Java/Java์˜ ์ •์„

Chapter 11 - ์ปฌ๋ ‰์…˜ ํ”„๋ ˆ์ž„์›

Chapter 11 - ์ปฌ๋ ‰์…˜ ํ”„๋ ˆ์ž„์›

1. ์ปฌ๋ ‰์…˜ ํ”„๋ ˆ์ž„์›(Collections Framework)

  • ์ปฌ๋ ‰์…˜ ํ”„๋ ˆ์ž„์› : ๋ฐ์ดํ„ฐ ๊ตฐ์„ ์ €์žฅํ•˜๋Š” ํด๋ž˜์Šค๋“ค์„ ํ‘œ์ค€ํ™”ํ•œ ์„ค๊ณ„
  • JDK 1.2 ์ด์ „๊นŒ์ง€๋Š” Vector, Hashtable, Properties์™€ ๊ฐ™์€ ์ปฌ๋ ‰์…˜ ํด๋ž˜์Šค ์กด์žฌ
    • ๊ฐ์ž ๋‹ค๋ฅธ ๋ฐฉ์‹์œผ๋กœ ์ฒ˜๋ฆฌ
  • JDK 1.2๋ถ€ํ„ฐ ์ปฌ๋ ‰์…˜ ํ”„๋ ˆ์ž„์›์ด ๋“ฑ์žฅ
    • ๋ชจ๋“  ํด๋ž˜์Šค๋“ค์„ ํ‘œ์ค€ํ™”๋œ ๋ฐฉ์‹์œผ๋กœ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋„๋ก ์ฒด๊ณ„ํ™”
    • ์ธํ„ฐํŽ˜์ด์Šค & ๋‹คํ˜•์„ฑ์„ ์ด์šฉํ•œ ๊ฐ์ฒด์ง€ํ–ฅ์  ์„ค๊ณ„

1.1 ์ปฌ๋ ‰์…˜ ํ”„๋ ˆ์ž„์›์˜ ํ•ต์‹ฌ ์ธํ„ฐํŽ˜์ด์Šค

  • 3๊ฐ€์ง€ ํƒ€์ž…์œผ๋กœ ๊ตฌ๋ถ„
    • List, Set, Map
    • List์™€ Set์˜ ๊ณตํ†ต๋œ ๋ถ€๋ถ„์„ ๋‹ค์‹œ ๋ฝ‘์•„์„œ ์ธํ„ฐํŽ˜์ด์Šค์ธ Collection์„ ์ถ”๊ฐ€๋กœ ์ •์˜
    • List -> Collection <- Set, Map
  • List
    • ์ˆœ์„œ๊ฐ€ ์žˆ๋Š” ๋ฐ์ดํ„ฐ์˜ ์ง‘ํ•ฉ & ๋ฐ์ดํ„ฐ์˜ ์ค‘๋ณต ํ—ˆ์šฉ
    • ์˜ˆ) ๋Œ€๊ธฐ์ž ๋ช…๋‹จ
    • ๊ตฌํ˜„ ํด๋ž˜์Šค : ArrayList, LinkedList, Stack, Vector ๋“ฑ
  • Set
    • ์ˆœ์„œ๋ฅผ ์œ ์ง€ํ•˜์ง€ ์•Š๋Š” ๋ฐ์ดํ„ฐ์˜ ์ง‘ํ•ฉ & ๋ฐ์ดํ„ฐ์˜ ์ค‘๋ณต ํ—ˆ์šฉ X
    • ์˜ˆ) ์–‘์˜ ์ •์ˆ˜์ง‘ํ•ฉ, ์†Œ์ˆ˜์˜ ์ง‘ํ•ฉ
    • ๊ตฌํ˜„ ํด๋ž˜์Šค : HashSet, TreeSet ๋“ฑ
  • Map
    • ํ‚ค์™€ ๊ฐ’์˜ ์Œ์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ์ง‘ํ•ฉ, ์ˆœ์„œ๋Š” ์œ ์ง€ X, ํ‚ค๋Š” ์ค‘๋ณต X, ๊ฐ’์€ ์ค‘๋ณต ํ—ˆ์šฉ
    • ์˜ˆ) ์šฐํŽธ๋ฒˆํ˜ธ, ์ง€์—ญ๋ฒˆํ˜ธ
    • ๊ตฌํ˜„ ํด๋ž˜์Šค : HashMap, TreeMap, Hashtable, Properties ๋“ฑ
  • Vector๋‚˜ Hashtable๊ณผ ๊ฐ™์€ ๊ธฐ์กด์˜ ์ปฌ๋ ‰์…˜ ํด๋ž˜์Šค๋“ค์€ ํ”„๋ ˆ์ž„์› ๋ช…๋ช…๋ฒ•์„ ๋”ฐ๋ฅด์ง€ ์•Š์œผ๋ฏ€๋กœ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹์Œ

Collection ์ธํ„ฐํŽ˜์ด์Šค

  • List์™€ Set์˜ ์กฐ์ƒ
  • ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ณ , ์ถ”๊ฐ€ํ•˜๊ณ  ์‚ญ์ œํ•˜๋Š” ๋“ฑ ์ปฌ๋ ‰์…˜์„ ๋‹ค๋ฃจ๋Š”๋ฐ ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ๋ฉ”์„œ๋“œ๋“ค์„ ์ •์˜
  • ์ŠคํŠธ๋ฆผ, ์ œ๋„ค๋ฆญ์Šค ๋“ฑ๋„ ์‚ฌ์šฉ๋จ

List ์ธํ„ฐํŽ˜์ด์Šค

  • ์ค‘๋ณต์„ ํ—ˆ์šฉํ•˜๋ฉด์„œ ์ €์žฅ์ˆœ์„œ๊ฐ€ ์œ ์ง€๋˜๋Š” ์ปฌ๋ ‰์…˜์„ ๊ตฌํ˜„ํ•˜๋Š”๋ฐ ์‚ฌ์šฉ
  • Vector, ArrayList, LinkedList ๋“ฑ์ด ์ž์† ํด๋ž˜์Šค

Set ์ธํ„ฐํŽ˜์ด์Šค

  • ์ค‘๋ณต์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๊ณ  ์ €์žฅ์ˆœ์„œ๊ฐ€ ์œ ์ง€๋˜์ง€ ์•Š๋Š” ์ปฌ๋ ‰์…˜ ํด๋ž˜์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋Š”๋ฐ ์‚ฌ์šฉ
  • Set์„ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค๋กœ๋Š” HashSet, TreeSet ๋“ฑ์ด ์žˆ์Œ
  • HashSet -> Set <- SortedSet <- TreeSet

Map ์ธํ„ฐํŽ˜์ด์Šค

  • ํ‚ค์™€ ๊ฐ’์„ ํ•˜๋‚˜์˜ ์Œ์œผ๋กœ ๋ฌถ์–ด์„œ ์ €์žฅํ•˜๋Š” ์ปฌ๋ ‰์…˜ ํด๋ž˜์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋Š”๋ฐ ์‚ฌ์šฉ
  • ํ‚ค๋Š” ์ค‘๋ณต X
  • ๊ฐ’์€ ์ค‘๋ณต์„ ํ—ˆ์šฉ
    • ์ค‘๋ณต๋œ ํ‚ค์™€ ๊ฐ’์„ ์ €์žฅํ•  ์‹œ ๊ธฐ์กด์˜ ๊ฐ’์€ ์—†์–ด์ง€๊ณ  ๋งˆ์ง€๋ง‰์— ์ €์žฅ๋œ ๊ฐ’๋งŒ ๋‚จ๊น€
  • ๊ตฌํ˜„ ํด๋ž˜์Šค๋กœ๋Š” Hashtable, HashMap, LinkedHashMap, SortedMap, TreeMap ๋“ฑ์ด ์žˆ์Œ
  • value()(์ €์žฅ๋œ ๋ชจ๋“  ๊ฐ’ ๋ฐ˜ํ™˜) ์—์„œ๋Š” ๋ฐ˜ํ™˜ ํƒ€์ž…์ด Collection, keySet()(์ €์žฅ๋œ ๋ชจ๋“  ํ‚ค ๋ฐ˜ํ™˜)์—์„œ๋Š” ๋ฐ˜ํ™˜ํƒ€์ž…์ด Set์ธ ๊ฒƒ์— ์ฃผ์˜
    • ๊ฐ’์€ ์ค‘๋ณต์„ ํ—ˆ์šฉํ•˜๊ณ  ํ‚ค๋Š” ์ค‘๋ณต์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š” ์†์„ฑ ๋•Œ๋ฌธ

Map.Entry ์ธํ„ฐํŽ˜์ด์Šค

  • Map ์ธํ„ฐํŽ˜์ด์Šค์˜ ๋‚ด๋ถ€ ์ธํ„ฐํŽ˜์ด์Šค
  • Map์— ์ €์žฅ๋˜๋Š” key-value ์Œ์„ ๋‹ค๋ฃจ๊ธฐ ์œ„ํ•ด ๋‚ด๋ถ€์ ์œผ๋กœ ์ •์˜ ๋œ ์ธํ„ฐํŽ˜์ด์Šค
    • equals(), getKey(), getValue(), hashCode(), setValue() ๋“ฑ์˜ ๋ฉ”์„œ๋“œ๊ฐ€ ์กด์žฌ

1.2 ArrayList

  • List ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„
    • ์ €์žฅ์ˆœ์„œ ์œ ์ง€, ์ค‘๋ณต ํ—ˆ์šฉ
  • ๊ธฐ์กด์˜ Vector๋ฅผ ๊ฐœ์„ ํ•œ ๊ฒƒ
    • ๊ตฌํ˜„์›๋ฆฌ & ๊ธฐ๋Šฅ์ ์ธ ์ธก๋ฉด์€ ๋™์ผ
    • ์†Œ์Šค์˜ ํ˜ธํ™˜์„ฑ์„ ์œ„ํ•ด ๋งŒ๋“ค์–ด์ง
  • Object ๋ฐ์ดํ„ฐ๋ฅผ ์ˆœ์ฐจ์ ์œผ๋กœ ์ €์žฅ
    • ์„ ์–ธ๋œ ๋ฐฐ์—ด์˜ ํƒ€์ž…์ด ๋ชจ๋“  ๊ฐ์ฒด์˜ ์ตœ๊ณ  ์กฐ์ƒ์ธ Object
  • Collections ํด๋ž˜์Šค์˜ sort ๋ฉ”์„œ๋“œ๋ฅผ ์ด์šฉํ•ด์„œ ์ €์žฅ๋œ ๊ฐ์ฒด๋“ค์„ ์ •๋ ฌ ๊ฐ€๋Šฅ
  • ์š”์†Œ๋“ค์„ ์ฐพ์•„์„œ ์‚ญ์ œ ์‹œ ๊ฑฐ๊พธ๋กœ ์ˆœํšŒํ•˜๋ฉด์„œ ์‚ญ์ œํ•  ๊ฒƒ
    • ๋นˆ ๊ณต๊ฐ„์ด ์ƒ๊ธฐ๋ฉด ์ฑ„์šฐ๊ธฐ ์œ„ํ•ด ๋‚˜๋จธ์ง€ ์š”์†Œ๋“ค์ด ์ž๋ฆฌ์ด๋™์„ ํ•˜๋ฏ€๋กœ
  • ์‹ค์ œ ์ €์žฅํ•  ๊ฐœ์ˆ˜๋ณด๋‹ค ์•ฝ๊ฐ„ ์—ฌ์œ  ์žˆ๋Š” ํฌ๊ธฐ๋กœ ์„ ์–ธํ•  ๊ฒƒ
    • ์ž๋™์ ์œผ๋กœ ์ €์žฅ ํฌ๊ธฐ๋ฅผ ๋Š˜๋ ค์ฃผ๋Š” ๊ณผ์ •์ด ์ฒ˜๋ฆฌ์‹œ๊ฐ„์ด ๋งŽ์ด ์†Œ์š”๋˜๋ฏ€๋กœ
  • vector์˜ ์šฉ๋Ÿ‰๊ณผ ํฌ๊ธฐ
    • v.trimToSize()๋Š” size์™€ capacity๋ฅผ ๊ฐ™๊ฒŒ ๋งŒ๋“ฌ
    • v.ensureCapacity(n)์—์„œ n์ด ๊ธฐ์กด์˜ capacity๋ณด๋‹ค ํฌ๊ธฐ๊ฐ€ ํฌ๋‹ค๋ฉด ์ƒˆ๋กœ์šด ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑ ํ›„ ํ• ๋‹น
    • v.setSize(n)์—์„œ capacity๊ฐ€ ์ถฉ๋ถ„ํ•˜์ง€ ์•Š๋‹ค๋ฉด ์ƒˆ๋กœ์šด ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑ ํ›„ ํ• ๋‹น (์ž๋™์ ์œผ๋กœ ๊ธฐ์กด์˜ ํฌ๊ธฐ๋ณด๋‹ค 2๋ฐฐ๋กœ capacity๋ฅผ ์ฆ๊ฐ€์‹œํ‚จ ๊ฐ์ฒด ์ƒ์„ฑ)
    • v.clear()๋Š” ๋ชจ๋“  ์š”์†Œ๋ฅผ ์ œ๊ฑฐ(capacity๋Š” ์œ ์ง€, ๋ชจ๋“  ๊ณต๊ฐ„์€ ๋‹ค null)
  • ArrayList, Vector์™€ ๊ฐ™์€ ์ž๋ฃŒ๊ตฌ์กฐ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์˜ค๊ณ  ์ €์žฅํ•˜๋Š” ๋ฐ๋Š” ํšจ์œจ์ด ์ข‹์ง€๋งŒ ์šฉ๋Ÿ‰์„ ๋ณ€๊ฒฝํ•˜๋Š” ๊ณผ์ •์˜ ํšจ์œจ์ด ๋–จ์–ด์ง
  • Object remove(int index)
    • ์ง€์ •๋œ ์œ„์น˜์— ์žˆ๋Š” ๊ฐ์ฒด๋ฅผ ์‚ญ์ œํ•˜๊ณ  ์‚ญ์ œํ•œ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜
    • ์‚ญ์ œํ•œ ๊ฐ์ฒด์˜ ๋ฐ”๋กœ ์•„๋ž˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ํ•œ ์นธ์”ฉ ์œ„๋กœ ๋ณต์‚ฌํ›„ ์‚ญ์ œํ•  ๊ฐ์ฒด๋ฅผ ๋ฎ์–ด์“ฐ๋Š” ๋ฐฉ์‹ (System.arraycopy๋ฅผ ํ˜ธ์ถœ)
  • ์ธ๋ฑ์Šค๊ฐ€ n์ธ ๋ฐ์ดํ„ฐ์˜ ์ฃผ์†Œ = ๋ฐฐ์—ด์˜ ์ฃผ์†Œ + n * ๋ฐ์ดํ„ฐ ํƒ€์ž…์˜ ํฌ๊ธฐ
  • ArrayList๋Š” LinkedList์— ๋น„ํ•ด ์ฝ๊ธฐ(์ ‘๊ทผ์‹œ๊ฐ„)๋Š” ๋น ๋ฅด๊ณ  ์ถ”๊ฐ€/์‚ญ์ œ๋Š” ๋Š๋ฆผ (์ˆœ์ฐจ์ ์ธ ์ถ”๊ฐ€์‚ญ์ œ๋Š” ๋” ๋น ๋ฆ„), ๋น„ํšจ์œจ์ ์ธ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ

1.3 LinkedList

  • ๋ฐฐ์—ด์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์žฅ์ ์„ ๋ณด์•ˆํ•˜๊ธฐ ์œ„ํ•ด ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ ๊ณ ์•ˆ
    1. ํฌ๊ธฐ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณต์‚ฌํ•ด์•ผํ•จ
    2. ๋น„์ˆœ์ฐจ์ ์ธ ๋ฐ์ดํ„ฐ์˜ ์ถ”๊ฐ€ ๋˜๋Š” ์‚ญ์ œ์— ๋งŽ์€ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆผ
  • ๊ฐ ์š”์†Œ๋“ค์€ ์ž์‹ ๊ณผ ์—ฐ๊ฒฐ๋œ ๋‹ค์Œ ์š”์†Œ์— ๋Œ€ํ•œ ์ฐธ์กฐ์™€ ๋ฐ์ดํ„ฐ๋กœ ๊ตฌ์„ฑ
    • ๋ฐ์ดํ„ฐ ์ด๋™์„ ์œ„ํ•œ ๋ณต์‚ฌ ๊ณผ์ •์ด ์—†์œผ๋ฏ€๋กœ ์ฒ˜๋ฆฌ์†๋„๊ฐ€ ๋น ๋ฆ„
    • ๋ฐ์ดํ„ฐ ์‚ญ์ œ๋Š” ์ด์ „ ๋ฐ์ดํ„ฐ๊ฐ€ ์‚ญ์ œํ•˜๊ณ ์ž ํ•˜๋Š” ์š”์†Œ์˜ ๋‹ค์Œ ์š”์†Œ๋ฅผ ์ฐธ์กฐํ•˜๋„๋ก
    • ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€๋Š” ์ถ”๊ฐ€ํ•˜๊ณ ์ž ํ•˜๋Š” ์œ„์น˜์˜ ์ด์ „ ์š”์†Œ์˜ ์ฐธ์กฐ๋ฅผ ์ƒˆ๋กœ์šด ์š”์†Œ์—, ์ƒˆ๋กœ์šด ์š”์†Œ๊ฐ€ ๊ทธ ๋‹ค์Œ ์š”์†Œ๋ฅผ ์ฐธ์กฐํ•˜๋„๋ก
  • ์ด์ „ ์š”์†Œ ๋˜ํ•œ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ตฌํ˜„๋œ๊ฒƒ์ด ๋”๋ธ” ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ(์ด์ค‘ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ)
    • ๋‹ค์Œ ์š”์†Œ์˜ ์ฃผ์†Œ, ์ด์ „ ์š”์†Œ์˜ ์ฃผ์†Œ, ๋ฐ์ดํ„ฐ๋กœ ๊ตฌ์„ฑ
  • ๋”๋ธ” ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ์˜ ์ ‘๊ทผ์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚จ ๊ฒƒ์ด ๋”๋ธ” ์”จํ˜๋Ÿฌ ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ(์ด์ค‘ ์›ํ˜• ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ)
    • ์ฒซ ๋ฒˆ์งธ ์š”์†Œ์™€ ๋งˆ์ง€๋ง‰ ์š”์†Œ๋ฅผ ์„œ๋กœ ์—ฐ๊ฒฐ์‹œํ‚จ ๊ฒƒ
  • ์ž๋ฐ”์˜ LinkedList๋Š” ๋”๋ธ” ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ๋กœ ๊ตฌํ˜„๋˜์–ด ์žˆ์Œ
    • ๋‚ฎ์€ ์ ‘๊ทผ์„ฑ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด
  • ์ˆœ์ฐจ์ ์œผ๋กœ ์ถ”๊ฐ€/์‚ญ์ œํ•˜๋Š” ๊ฒฝ์šฐ์—” ArrayList๊ฐ€ LinkedList๋ณด๋‹ค ๋น ๋ฆ„
    • ArrayList์˜ ๊ฐ ์š”์†Œ๋“ค์˜ ๋ฐ์ดํ„ฐ ์žฌ๋ฐฐ์น˜๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ
  • ์ค‘๊ฐ„ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€/์‚ญ์ œํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” LinkedList๊ฐ€ ArrayList๋ณด๋‹ค ๋น ๋ฆ„
    • ArrayList๋Š” ๊ฐ ์š”์†Œ๋“ค์„ ์žฌ๋ฐฐ์น˜ ํ›„ ์ถ”๊ฐ€ํ•  ๊ณต๊ฐ„์„ ํ• ๋‹นํ•ด์•ผํ•˜์ง€๋งŒ LinkedList๋Š” ๊ฐ ์š”์†Œ์˜ ์—ฐ๊ฒฐ๋งŒ ๋ณ€๊ฒฝํ•ด์ฃผ๋ฉด ๊ฐ€๋Šฅ
  • LinkedList๋Š” ArrayLIst์— ๋น„ํ•ด ์ฝ๊ธฐ(์ ‘๊ทผ์‹œ๊ฐ„)๋Š” ๋Š๋ฆฌ๊ณ  ์ถ”๊ฐ€/์‚ญ์ œ๋Š” ๋Š๋ฆฌ๋ฉฐ ๋ฐ์ดํ„ฐ๊ฐ€ ๋งŽ์„ ์ˆ˜๋ก ์ ‘๊ทผ์„ฑ์ด ๋–จ์–ด์ง€๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค.

1.4 Stack๊ณผ Queue

  • ์Šคํƒ์€ ๋งˆ์ง€๋ง‰์— ์ €์žฅํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์žฅ ๋จผ์ € ๊บผ๋‚ด๊ฒŒ ๋˜๋Š” LIFO(Last In First Out) ๊ตฌ์กฐ
    • ์ˆœ์ฐจ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ์‚ญ์ œํ•˜๊ธฐ ๋•Œ๋ฌธ์— ArrayList์™€ ๊ฐ™์€ ๋ฐฐ์—ด๊ธฐ๋ฐ˜์˜ ์ปฌ๋ž™์…˜์ด ์ ํ•ฉ
    • ์ž๋ฐ”์—์„œ Stack ํด๋ž˜์Šค ๊ตฌํ˜„ํ•˜์—ฌ ์ œ๊ณต
  • ํ๋Š” ์ฒ˜์Œ์— ์ €์žฅํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์žฅ ๋จผ์ € ๊บผ๋‚ด๊ฒŒ ๋˜๋Š” FIFO(First In First Out) ๊ตฌ์กฐ
    • ๋ฐ์ดํ„ฐ๋ฅผ ๊บผ๋‚ผ ๋•Œ ํ•ญ์ƒ ์ฒซ ๋ฒˆ์งธ ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ•˜๋ฏ€๋กœ LinkedList๋กœ ๊ตฌํ˜„์ด ์ ํ•ฉ(ArrayList๋Š” ์ฒซ ๋ฒˆ์งธ ์›์†Œ ์‚ญ์ œ์‹œ ์žฌ๋ฐฐ์น˜๋ฅผ ํ•ด์•ผํ•˜๋ฏ€๋กœ)
    • ์ž๋ฐ”์—์„  Queue ์ธํ„ฐํŽ˜์ด์Šค๋งŒ ์กด์žฌ, ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค๋ฅผ ์„ ํƒํ•ด์„œ ์‚ฌ์šฉ

์Šคํƒ๊ณผ ํ์˜ ํ™œ์šฉ

  • ์Šคํ…์˜ ํ™œ์šฉ ์˜ˆ
    • ์ˆ˜์‹ ๊ณ„์‚ฐ, ์ˆ˜์‹ ๊ด„ํ˜ธ ๊ฒ€์‚ฌ, ์›Œ๋“œํ”„๋กœ์„ธ์„œ์˜ undo/redo, ์›น๋ธŒ๋ผ์šฐ์ €์˜ ๋’ค๋กœ/์•ž์œผ๋กœ
  • ํ์˜ ํ™œ์šฉ ์˜ˆ
    • ์ตœ๊ทผ ์‚ฌ์šฉ ๋ฌธ์„œ, ์ธ์‡„์ž‘์—… ๋Œ€๊ธฐ๋ชฉ๋ก, ๋ฒ„ํผ

PriorityQueue

  • Queue์˜ ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌํ˜„์ฒด ์ค‘ ํ•˜๋‚˜
  • ์ €์žฅํ•œ ์ˆœ์„œ์— ๊ด€๊ณ„์—†์ด ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€ ๊ฒƒ๋ถ€ํ„ฐ ๊บผ๋‚ธ๋‹ค.
  • null์„ ์ €์žฅ ํ•  ์ˆ˜ ์—†๋‹ค. (NullPointException ๋ฐœ์ƒ)
  • ์ €์žฅ๊ณต๊ฐ„์œผ๋กœ ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•˜๊ณ  ๊ฐ ์š”์†Œ๋ฅผ heap์ด๋ผ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ ํ˜•ํƒœ๋กœ ์ €์žฅ
    • ํž™์€ ์ด์ง„ํŠธ๋ฆฌ์˜ ์ข…๋ฅ˜๋กœ์จ ๊ฐ€์žฅ ํฐ ๊ฐ’์ด๋‚˜ ๊ฐ€์žฅ ์ž‘์€ ๊ฐ’์„ ๋น ๋ฅด๊ฒŒ ์ฐพ์•„์คŒ
  • ์ˆซ์ž๋ฟ ์•„๋‹ˆ๋ผ ๊ฐ์ฒด๋„ ์ €์žฅ ๊ฐ€๋Šฅ, ๊ฐ ํฌ๊ธฐ๋ฅผ ๋น„๊ตํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•ด์•ผํ•จ
    • ์ˆซ์ž๋“ค์˜ ๊ฒฝ์šฐ ์˜คํ† ๋ฐ•์‹ฑ๋˜๋ฉฐ Number์˜ ์ž์†๋“ค์€ ์ž์ฒด์ ์œผ๋กœ ์ •์˜๋˜์–ด์žˆ์Œ

Deque(Double-Ended Queue)

  • Queue์˜ ๋ณ€ํ˜•, ์–‘์ชฝ ๋์— ์ถ”๊ฐ€/์‚ญ์ œ๊ฐ€ ๊ฐ€๋Šฅ
  • Dequq์˜ ์กฐ์ƒ์€ Queue
  • ๊ตฌํ˜„์ฒด๋Š” ArrayDeque, LinkedList ๋“ฑ์ด ์žˆ์Œ
  • ์Šคํƒ๊ณผ ํ๋ฅผ ํ•ฉ์ณ๋†“์€ ๊ฒƒ๊ณผ ๊ฐ™์œผ๋ฏ€๋กœ ์Šคํƒ์œผ๋กœ๋„, ํ๋กœ๋„ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

1.5 Iterator, ListIterator, Enumeration

  • Iterator, ListIterator, Enumeration ๋ชจ๋‘ ์ปฌ๋ ‰์…˜์— ์ €์žฅ๋œ ์š”์†Œ๋ฅผ ์ ‘๊ทผํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค
    • Enumeration์€ Iterator์˜ ๊ตฌ๋ฒ„์ „
    • ListIterator๋Š” Iterator์˜ ๊ธฐ๋Šฅ์„ ํ–ฅ์ƒ ์‹œํ‚จ ๊ฒƒ

Iterator

  • ์ปฌ๋ ‰์…˜ ํ”„๋ ˆ์ž„์›์˜ ์ €์žฅ๋œ ์š”์†Œ๋“ค์„ ์ฝ์–ด์˜ค๋Š” ๋ฐฉ๋ฒ•์˜ ํ‘œ์ค€ํ™”
  • Iterator๋Š” ์ •์˜๋œ ์ธํ„ฐํŽ˜์ด์Šค, Collection์—์„  Iterator๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” iterator() ์ •์˜
    • ์ฝ”๋“œ์˜ ์ผ๊ด€์„ฑ์„ ๋†’ํ˜€์คŒ
  • ๋ฉ”์„œ๋“œ
    • boolean hasNext() : ์ฝ์–ด ์˜ฌ ์š”์†Œ๊ฐ€ ๋‚จ์•„์žˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ return
    • Object next() : ๋‹ค์Œ ์š”์†Œ๋ฅผ ์ฝ์–ด์˜ด, hasNext()๋ฅผ ๋จผ์ € ํ˜ธ์ถœํ•ด์•ผ ์•ˆ์ „
    • void remove() : next()๋กœ ์ฝ์–ด ์˜จ ์š”์†Œ๋ฅผ ์‚ญ์ œ, enxt()๋ฅผ ํ˜ธ์ถœ ํ›„ ์‚ฌ์šฉํ•ด์•ผํ•จ
  • Map์„ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค๋Š” ํ‚ค์™€ ๊ฐ’์„ ์Œ์œผ๋กœ ์ €์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— keySet()์ด๋‚˜ entrySet()๊ณผ ๊ฐ™์€ ๋ฉ”์„œ๋“œ๋กœ Set์„ ์–ป์–ด์˜ค๊ณ  iterator()๋ฅผ ํ˜ธ์ถœํ•ด์•ผํ•จ

ListIterator์™€ Enumeration

  • Enumeration : Iterator์˜ ๊ตฌ๋ฒ„์ „
    • boolean hasMoreElements(), Object nextElement()
  • ListIterator : Iterator์— ์–‘๋ฐฉํ–ฅ ์กฐํšŒ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ (List๋ฅผ ๊ตฌํ˜„ํ•œ ๊ฒฝ์šฐ์—๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ)
  • Object PreviousIndex(), Object Previous(), boolean hasPrevious() ๋“ฑ๋“ฑ ์ถ”๊ฐ€

1.6 Arrays

  • ๋ฐฐ์—ด์„ ๋‹ค๋ฃจ๋Š”๋ฐ ์œ ์šฉํ•œ ๋ฉ”์„œ๋“œ๊ฐ€ ์ •์˜

๋ฐฐ์—ด์˜ ๋ณต์‚ฌ - copyOf(), copyOfRange()

  • copyOf()๋Š” ๋ฐฐ์—ด ์ „์ฒด๋ฅผ ๋ณต์‚ฌํ•ด์„œ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์„ ๋งŒ๋“  ๋’ค ๋ฐ˜ํ™˜
  • copyOfRange()๋Š” ๋ฐฐ์—ด์˜ ์ผ๋ถ€๋ฅผ ๋ณต์‚ฌํ•ด์„œ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์„ ๋งŒ๋“ค์–ด ๋ฐ˜ํ™˜
    • ๋ฒ”์œ„์˜ ๋์€ ํฌํ•จ๋˜์ง€ ์•Š์Œ

๋ฐฐ์—ด ์ฑ„์šฐ๊ธฐ - fill(), setAll()

  • fill()์€ ๋ฐฐ์—ด์˜ ๋ชจ๋“  ์š”์†Œ๋ฅผ ์ง€์ •๋œ ๊ฐ’์œผ๋กœ ์ฑ„์›€
  • setAll()์€ ํ•จ์ˆ˜ํ˜• ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›์•„์„œ ๋ฐฐ์—ด์„ ์ฑ„์›€(๊ตฌํ˜„ ๊ฐ์ฒด or ๋žŒ๋‹ค์‹ ์ง€์ •)

๋ฐฐ์—ด์˜ ์ •๋ ฌ๊ณผ ๊ฒ€์ƒ‰ - sort(), binarySearch()

  • sort()๋Š” ๋ฐฐ์—ด์„ ์ •๋ ฌํ•  ๋•Œ ์‚ฌ์šฉ
  • binarySearch()๋Š” ๋ฐฐ์—ด์— ์ €์žฅ๋œ ์š”์†Œ๋ฅผ ๊ฒ€์ƒ‰ํ•  ๋•Œ ์‚ฌ์šฉ
    • ์ง€์ •๋œ ๊ฐ’์ด ์ €์žฅ๋œ ์œ„์น˜๋ฅผ ์ฐพ์•„์„œ ๋ฐ˜ํ™˜
    • ๋ฐฐ์—ด์ด ์ •๋ ฌ๋œ ์ƒํƒœ์–ด์ด์•ผ ํ•จ
    • ๊ฒ€์ƒ‰ํ•œ ๊ฐ’๊ณผ ์ผ์น˜ํ•˜๋Š” ์š”์†Œ๋“ค์ด ์—ฌ๋Ÿฌ ๊ฐœ ์žˆ๋‹ค๋ฉด ์–ด๋–ค ๊ฒƒ์ด ๋ฐ˜ํ™˜๋ ์ง€ ์•Œ ์ˆ˜ ์—†์Œ

๋ฐฐ์—ด์˜ ๋น„๊ต์™€ ์ถœ๋ ฅ - equals(), toString()

  • toString()์€ ๋ฐฐ์—ด์˜ ๋ชจ๋“  ์š”์†Œ๋ฅผ ๋ฌธ์ž์—ด๋กœ ํŽธํ•˜๊ฒŒ ์ถœ๋ ฅ
    • ์ผ์ฐจ์› ๋ฐฐ์—ด์—๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
    • ๋‹ค์ฐจ์› ๋ฐฐ์—ด์€ deepToString() ์‚ฌ์šฉ(๋ชจ๋“  ์š”์†Œ๋ฅผ ์žฌ๊ท€์ ์œผ๋กœ ์ ‘๊ทผํ•ด์„œ ๋ฌธ์ž์—ด์„ ๊ตฌ์„ฑ)
  • equals()๋Š” ๋‘ ๋ฐฐ์—ด์— ์ €์žฅ๋œ ๋ชจ๋“  ์š”์†Œ๋ฅผ ๋น„๊ต ํ›„ ๊ฒฐ๊ณผ return
    • ์ผ์ฐจ์› ๋ฐฐ์—ด์—๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
    • ๋‹ค์ฐจ์› ๋ฐฐ์—ด์€ deepEqauls() ์‚ฌ์šฉ(๋ชจ๋“  ์š”์†Œ๋ฅผ ์žฌ๊ท€์ ์œผ๋กœ ์ ‘๊ทผํ•ด์„œ ๋น„๊ต)

๋ฐฐ์—ด์„ List๋กœ ๋ณ€ํ™˜ - asList(Object... a)

  • asList๋Š” ๋ฐฐ์—ด์„ List์— ๋‹ด์•„์„œ ๋ฐ˜ํ™˜
    • ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ํƒ€์ž…์ด ๊ฐ€๋ณ€์ธ์ˆ˜ -> ๋ฐฐ์—ด ์ƒ์„ฑ ์—†์ด ์ €์žฅํ•  ์š”์†Œ๋“ค๋งŒ ๋‚˜์—ด๋„ ๊ฐ€๋Šฅ
  • asList()๊ฐ€ ๋ฐ˜ํ™˜ํ•œ List์˜ ํฌ๊ธฐ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†์Œ
    • ์ถ”๊ฐ€ ๋˜๋Š” ์‚ญ์ œ๊ฐ€ ๋ถˆ๊ฐ€๋Šฅ
    • ์ €์žฅ๋œ ๋‚ด์šฉ์˜ ๋ณ€๊ฒฝ์€ ๊ฐ€๋Šฅ
    • ํฌ๊ธฐ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š” List๋Š” new ArrayList(Arrays.asList(1,2,3,4,5))์™€ ๊ฐ™์€ ํ˜•์‹์œผ๋กœ ํ˜ธ์ถœ

parallelXXX(), spliterator(), stream()

  • parallelXXX() : ๋ณด๋‹ค ๋น ๋ฅธ ๊ฒฐ๊ณผ๋ฅผ ์–ป๊ธฐ ์œ„ํ•ด ์—ฌ๋Ÿฌ ์“ฐ๋ ˆ๋“œ๊ฐ€ ์ž‘์—…์„ ๋‚˜๋ˆ„์–ด ์ฒ˜๋ฆฌ
  • spliterator() : ์—ฌ๋Ÿฌ ์“ฐ๋ ˆ๋“œ๊ฐ€ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋‚˜์˜ ์ž‘์—…์„ ์—ฌ๋Ÿฌ ์ž‘์—…์œผ๋กœ ๋‚˜๋ˆ„๋Š” Spliterator ๋ฐ˜ํ™˜
  • stream() : ์ปฌ๋ ‰์…˜์„ ์ŠคํŠธ๋ฆผ์œผ๋กœ ๋ณ€ํ™˜

1.7 Comparator์™€ Comparable

  • ์ปฌ๋ ‰์…˜์„ ์ •๋ ฌํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ๋ฉ”์„œ๋“œ๋ฅผ ์ •์˜ํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค
    • Comparable : ๊ธฐ๋ณธ ์ •๋ ฌ๊ธฐ์ค€์„ ๊ตฌํ˜„ํ•˜๋Š”๋ฐ ์‚ฌ์šฉ
    • Comparator : ๊ธฐ๋ณธ ์ •๋ ฌ๊ธฐ์ค€ ์™ธ์— ๋‹ค๋ฅธ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌํ•˜๊ณ ์žํ•  ๋•Œ ์‚ฌ์šฉ
  • ๋น„๊ตํ•˜๋Š” ๊ฐ’์ด ํฌ๋ฉด -1, ๊ฐ™์œผ๋ฉด 0, ์ž‘์œผ๋ฉด 1์„ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ๊ตฌํ˜„
  • Arrays.sort()
    • Comparator๋ฅผ ์ง€์ •ํ•ด์ฃผ์ง€ ์•Š์œผ๋ฉด ์ €์žฅํ•˜๋Š” ๊ฐ์ฒด์— ๊ตฌํ˜„๋œ ๋‚ด์šฉ์— ๋”ฐ๋ผ ์ •๋ ฌ
    • static void sort(Object[] a) : ๊ฐ์ฒด ๋ฐฐ์—ด์— ์ €์žฅํ•œ ๊ฐ์ฒด๊ฐ€ ๊ตฌํ˜„ํ•œ Comparable์— ์˜ํ•œ ์ •๋ ฌ
    • static void sort(Object[] a, Comparator c) : ์ง€์ •ํ•œ Comparator์— ์˜ํ•œ ์ •๋ ฌ
  • String์—์„  ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š๊ณ  ๋น„๊ตํ•˜๋Š” Comparator๋ฅผ ์ƒ์ˆ˜์˜ ํ˜•ํƒœ๋กœ ์ œ๊ณต
    • public static final Comparator CASE_INSENSITIVE_ORDER
  • ๊ตฌํ˜„๋œ compareTo() ๊ฒฐ๊ณผ์— -1์„ ๊ณฑํ•˜๋Š” ์‹์œผ๋กœ ๋ฐ˜๋Œ€๋กœ ์ •๋ ฌํ•˜๋Š” ๊ฒƒ๋„ ๊ฐ€๋Šฅ
  • compare()์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ Object์ž„์œผ๋กœ ํ˜•๋ณ€ํ™˜ ํ›„ compareTo()๋ฅผ ํ˜ธ์ถœํ•  ๊ฒƒ

1.8 HashSet

  • Set ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ๊ฐ€์žฅ ๋Œ€ํ‘œ์ ์ธ ์ปฌ๋ ‰์…˜
  • ์ค‘๋ณต๋œ ์š”์†Œ๋ฅผ ์ €์žฅํ•˜์ง€ ์•Š์Œ
  • ์ €์žฅ ์ˆœ์„œ๋ฅผ ์œ ์ง€ํ•˜์ง€ ์•Š์Œ
    • ์ €์žฅ ์ˆœ์„œ๋ฅผ ์œ ์ง€ํ•˜๋ผ๋ฉด LinkedHashSet์„ ์‚ฌ์šฉ
  • HashSet์˜ add ๋ฉ”์„œ๋“œ๋Š” ์ƒˆ๋กœ์šด ์š”์†Œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ธฐ ์ „์— ๊ธฐ์กด์— ์ €์žฅ๋œ ์š”์†Œ์™€ ๊ฐ™์€ ๊ฒƒ์ธ์ง€ ํŒ๋ณ„
    • eqauls()์™€ hashCode()๋ฅผ ํ˜ธ์ถœํ•˜๋ฏ€๋กœ ๋ชฉ์ ์— ๋งž๊ฒŒ ์˜ค๋ฒ„๋ผ์ด๋”ฉ ํ•ด์•ผ ํ•จ
  • hashCode()๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ ๋‹ค์Œ์˜ ์„ธ ๊ฐ€์ง€ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•ด์•ผ ํ•œ๋‹ค.
    1. ์—ฌ๋Ÿฌ ๋ฒˆ hashCode()๋ฅผ ํ˜ธ์ถœํ•ด๋„ ๋™์ผํ•œ int ๊ฐ’์„ ๋ฐ˜ํ™˜
    2. equals() ๋ฉ”์„œ๋“œ๋ฅผ ์ด์šฉํ•œ ๋น„๊ต์—์„œ true๊ฐ€ ๋‚˜์˜จ๋‹ค๋ฉด ๋‘ ๊ฐ์ฒด์—์„œ ๊ฐ๊ฐ ์–ป์€ hashCode()์˜ ๊ฒฐ๊ณผ๋„ ๊ฐ™์•„์•ผ ํ•จ
    3. equals() ๋ฉ”์„œ๋“œ๋ฅผ ์ด์šฉํ•œ ๋น„๊ต์—์„œ true๊ฐ€ ๋‚˜์˜ค๋”๋ผ๋„ hashCode()์—์„œ ๊ฐ™์€ int ๊ฐ’์ด ๋ฐ˜ํ™˜๋˜๋Š” ๊ฒฝ์šฐ๋Š” ๊ดœ์ฐฎ์ง€๋งŒ ์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ์œ„ํ•ด ๋‹ค๋ฅธ int ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Œ

1.9 TreeSet

  • TreeSet์€ ์ด์ง„ ๊ฒ€์ƒ‰ ํŠธ๋ฆฌ(binary search tree)๋ผ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์˜ ํ˜•ํƒœ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅ
    • ์ด์ง„ ๊ฒ€์ƒ‰ ํŠธ๋ฆฌ๋Š” ์ •๋ ฌ, ๊ฒ€์ƒ‰, ๋ฒ”์œ„ ๊ฒ€์ƒ‰์— ๋†’์€ ์„ฑ๋Šฅ์„ ๋ณด์ž„
    • TreeSet์€ ์ด์ง„ ๊ฒ€์ƒ‰ ํŠธ๋ฆฌ์˜ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚จ ๋ ˆ๋“œ-๋ธ”๋ž™ ํŠธ๋ฆฌ๋กœ ๊ตฌํ˜„
    • ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋…ธ๋“œ๊ฐ€ ์„œ๋กœ ์—ฐ๊ฒฐ๋œ ๊ตฌ์กฐ (์ตœ๋„ 2๊ฐœ์˜ ๋…ธ๋“œ ์—ฐ๊ฒฐ, ๋ฃจํŠธ ๋…ธ๋“œ๋ถ€ํ„ฐ ๊ณ„์† ํ™•์žฅ)
    • ๋ถ€๋ชจ ๋…ธ๋“œ์˜ ์™ผ์ชฝ์—๋Š” ๋ถ€๋ชจ ๋…ธ๋“œ์˜ ๊ฐ’๋ณด๋‹ค ์ž‘์€ ๊ฐ’, ์˜ค๋ฅธ์ชฝ์—๋Š” ํฐ ๊ฐ’
    • ์™ผ์ชฝ ๋งˆ์ง€๋ง‰ ๊ฐ’๋ถ€ํ„ฐ ์˜ค๋ฅธ์ชฝ ๊ฐ’๊นŒ์ง€ ๊ฐ’์„ ์ฝ์–ด์˜ค๋ฉด ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ๋œ ์ˆœ์„œ๋ฅผ
    • ๊ฐ’์„ ๋น„๊ตํ•˜๊ธฐ ์œ„ํ•ด์„  ์ €์žฅ๋˜๋Š” ๊ฐ์ฒด์˜ Comparable ๊ตฌํ˜„ or TreeSet์ด Comparator๋ฅผ ๊ตฌํ˜„
  • Set ์ธํ„ฐํŽ˜์ด์Šค์˜ ๊ตฌํ˜„์ฒด์ด๋ฏ€๋กœ ์ค‘๋ณต๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜์ง€ ์•Š๊ณ  ์ •๋ ฌ๋œ ์œ„์น˜์— ์ €์žฅํ•˜๋ฏ€๋กœ ์ €์žฅ ์ˆœ์„œ ์œ ์ง€ X
  • ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ๋ณด๋‹ค ์ถ”๊ฐ€/์‚ญ์ œ ์‹œ๊ฐ„์€ ๋” ๊ฑธ๋ฆฌ์ง€๋งŒ ๋ฐฐ์—ด์ด๋‚˜ ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ์— ๋น„ํ•ด ๊ฒ€์ƒ‰๊ณผ ์ •๋ ฌ ๊ธฐ๋Šฅ์ด ๋›ฐ์–ด๋‚จ
  • subSet() ๋ฉ”์„œ๋“œ๋Š” ๋ ๋ฒ”์œ„๋Š” ํฌํ•จ๋˜์ง€ ์•Š๋Š” ๊ฒƒ์— ์ฃผ์˜
    • ๋Œ€๋ฌธ์ž๊ฐ€ ์†Œ๋ฌธ์ž๋ณด๋‹ค ์šฐ์„ (๊ณต๋ฐฑ, ์ˆซ์ž, ๋Œ€๋ฌธ์ž, ์†Œ๋ฌธ์ž์˜ ์ˆœ)
  • headSet(), tailSet์œผ๋กœ ๊ธฐ์ค€ ๊ฐ’ ๋ณด๋‹ค ํฐ ๊ฐ’๊ณผ ์ž‘์€ ๊ฐ’์˜ ๊ฐ์ฒด๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Œ

1.10 HashMap๊ณผ HashTable

  • HashTable๊ณผ HashMap์˜ ๊ด€๊ณ„๋Š” Vector์™€ ArrayList์˜ ๊ด€๊ณ„์™€ ๊ฐ™์Œ (์ƒˆ๋กœ์šด ๋ฒ„์ „์ธ HashMap์„ ์‚ฌ์šฉํ•  ๊ฒƒ์„ ๊ถŒ์žฅ)
  • HashMap์€ Map์„ ๊ตฌํ˜„ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ํ‚ค์™€ ๊ฐ’์„ ๋ฌถ์–ด์„œ ํ•˜๋‚˜์˜ ๋ฐ์ดํ„ฐ๋กœ ์ €์žฅํ•˜๋Š” ํŠน์ง•
    • Entry๋Š” ํ‚ค์™€ ๊ฐ’์„ ๋ฌถ์€ ํด๋ž˜์Šค
    • ํ‚ค๋Š” ์ปฌ๋ ‰์…˜ ๋‚ด์—์„œ ์œ ์ผํ•ด์•ผ ํ•จ (๊ฐ™์€ ํ‚ค๋กœ ์ž๋ฃŒ๊ฐ€ ์ถ”๊ฐ€๋˜๋ฉด ๋ฎ์–ด๋ฒ„๋ฆผ)
    • ๊ฐ’์€ ํ‚ค์™€ ๋‹ฌ๋ฆฌ ๋ฐ์ดํ„ฐ์˜ ์ค‘๋ณต์„ ํ—ˆ์šฉ
  • HashMap์€ ๋ฐ์ดํ„ฐ์˜ ํ‚ค์™€ ๊ฐ’์„ ๋ชจ๋‘ Object ํƒ€์ž…์œผ๋กœ ์ €์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— HashMap์˜ ๊ฐ’์œผ๋กœ HashMap์„ ๋‹ค์‹œ ์ €์žฅํ•  ์ˆ˜ ์žˆ์Œ

ํ•ด์‹ฑ๊ณผ ํ•ด์‹œ ํ•จ์ˆ˜

  • ํ•ด์‹ฑ์€ ํ•ด์‹œ ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ํ•ด์‹œํ…Œ์ด๋ธ”์— ์ €์žฅํ•˜๊ณ  ๊ฒ€์ƒ‰ํ•˜๋Š” ๊ธฐ๋ฒ•
    • ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋˜์–ด ์žˆ๋Š” ๊ณณ์„ ์•Œ๋ ค ์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ ์ค‘์—์„œ๋„ ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋น ๋ฅด๊ฒŒ ์ฐพ์„ ์ˆ˜ ์žˆ์Œ
  • ์ปฌ๋ ‰์…˜ ๊ตฌํ˜„์ฒด ํด๋ž˜์Šค๋กœ๋Š” HashSet, HashMap, HashTable์ด ์กด์žฌ
  • ํ•ด์‹ฑ์˜ ์ž๋ฃŒ๊ตฌ์กฐ๋Š” ๋ฐฐ์—ด๊ณผ ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ์˜ ์กฐํ•ฉ์œผ๋กœ ์ด๋ฃจ์–ด์ง
    • ์ €์žฅํ•  ๋ฐ์ดํ„ฐ์˜ ํ‚ค๋ฅผ ํ•ด์‹œ ํ•จ์ˆ˜์— ๋„ฃ์œผ๋ฉด ๋ฐฐ์—ด์˜ ํ•œ ์š”์†Œ๋ฅผ ์–ป๊ฒŒ ๋จ
    • ๋‹ค์‹œ ๊ทธ๊ณณ์— ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ์— ์ €์žฅ
    • ์กฐํšŒ ์‹œ ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ์—์„œ ๊ฒ€์ƒ‰ํ•œ ํ‚ค์™€ ์ผ์น˜ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ์Œ
  • ์ €์žฅ๋  ๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ๋ฅผ ๊ณ ๋ คํ•ด์„œ HashMap์˜ ํฌ๊ธฐ๋ฅผ ์ ์ ˆํ•˜๊ฒŒ ์ง€์ • ํ›„ ์ค‘๋ณต๋œ ํ•ด์‹œ ์ฝ”๋“œ์˜ ๋ฐ˜ํ™˜์„ ์ตœ์†Œํ™”ํ•ด์•ผ ๋จ
    • ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ์˜ ํฌ๊ธฐ๊ฐ€ ์ปค์งˆ์ˆ˜๋ก ๊ฒ€์ƒ‰ ์†๋„๊ฐ€ ๋–จ์–ด์ง€๊ธฐ ๋•Œ๋ฌธ
  • Object ํด๋ž˜์Šค์— ์ •์˜๋œ hashCode()๋Š” ๊ฐ์ฒด์˜ ์ฃผ์†Œ๋ฅผ ์ด์šฉํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ํ•ด์‹œ ์ฝ”๋“œ ์ƒ์„ฑ
  • String์˜ ๊ฒฝ์šฐ ๊ฐ™์€ ๋ฌธ์ž์—ด์„ ๊ฐ€์กŒ๋‹ค๋ฉด ๊ฐ™์€ ํ•ด์‹œ ์ฝ”๋“œ๋ฅผ ์–ป๋„๋ก ์˜ค๋ฒ„๋ผ์ด๋”ฉ
  • equals()๋กœ ๋น„๊ตํ•œ ๊ฒฐ๊ณผ๊ฐ€ true๋ผ๋ฉด hashCode()์˜ ๋ฐ˜ํ™˜๊ฐ’์ด ๊ฐ™์•„์•ผ ๊ฐ™์€ ๊ฐ์ฒด๋กœ ์ธ์‹ํ•˜๋ฏ€๋กœ equals()๋ฅผ ์žฌ์ •์˜ํ•œ๋‹ค๋ฉด hashCode()๋„ ์žฌ์ •์˜ ํ•  ๊ฒƒ

1.11 TreeMap

  • ์ด์ง„๊ฒ€์ƒ‰ ํŠธ๋ฆฌ์˜ ํ˜•ํƒœ๋กœ ํ‚ค์™€ ๊ฐ’์˜ ์Œ์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅ
    • ๊ฒ€์ƒ‰๊ณผ ์ •๋ ฌ์— ์ ํ•ฉํ•œ ์ปฌ๋ ‰์…˜ ํด๋ž˜์Šค
  • ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ์—์„œ HashMap์ด TreeMap๋ณด๋‹ค ๋” ๋›ฐ์–ด๋‚˜์ง€๋งŒ ๋ฒ”์œ„ ๊ฒ€์ƒ‰์ด๋‚˜ ์ •๋ ฌ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ์—๋Š” TreeMap์„ ์‚ฌ์šฉํ•  ๊ฒƒ

1.12 Properties

  • HashMap์˜ ๊ตฌ ๋ฒ„์ „์ธ HashTable์„ ์ƒ์†๋ฐ›์•„ ๊ตฌํ˜„ํ•œ ๊ฒƒ
  • ๊ธฐ์กด์˜ HashTable ๊ณผ๋Š” ๋‹ฌ๋ฆฌ (String, String)์˜ ํ˜•ํƒœ๋กœ ์ €์žฅํ•˜๋Š” ๋ณด๋‹ค ๋‹จ์ˆœํ™”๋œ ์ปฌ๋ ‰์…˜ ํด๋ž˜์Šค
  • ์ฃผ๋กœ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํ™˜๊ฒฝ์„ค์ •๊ณผ ๊ด€๋ จ๋œ ์†์„ฑ์„ ์ €์žฅ
  • ๋ฐ์ดํ„ฐ๋ฅผ ํŒŒ์ผ๋กœ๋ถ€ํ„ฐ ์ฝ๊ณ  ์“ฐ๋Š” ํŽธ๋ฆฌํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณต
  • setProperty()๋Š” ๋‹จ์ˆœํžˆ Hashtable์˜ put ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœ
    • ๊ธฐ์กด์— ๊ฐ™์€ ํ‚ค๋กœ ์ €์žฅ๋œ ๊ฐ’์ด ์žˆ๋Š” ๊ฒฝ์šฐ ๊ทธ ๊ฐ’์„ Object๋กœ ๋ฐ˜ํ™˜, ๊ทธ๋ ‡์ง€ ์•Š์„ ๋•Œ๋Š” null ๋ฐ˜ํ™˜
  • getProperty()๋Š” ์ €์žฅ๋œ ๊ฐ’์„ ์ฝ์–ด์˜ด
    • ์ฝ์–ด์˜ค๋Š” ํ‚ค๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉด return ํ•  ๊ธฐ๋ณธ๊ฐ’์„ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์„ ์–ธ ๊ฐ€๋Šฅ
  • ์ถœ๋ ฅ๋œ ์ˆœ์„œ๋Š” ์ €์žฅ ์ˆœ์„œ์™€ ๋ฌด๊ด€
  • list() ๋ฉ”์„œ๋“œ๋กœ Properties์— ์ €์žฅ๋œ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ํ™”๋ฉด ๋˜๋Š” ํŒŒ์ผ์— ์ถœ๋ ฅ

1.13 Collections

  • Collections๋Š” ์ปฌ๋ ‰์…˜๊ณผ ๊ด€๋ จ๋œ ๋ฉ”์„œ๋“œ๋ฅผ ์ œ๊ณต
  • fill(), copy(), sort(), binarySearch()๋Š” Arrays ํด๋ž˜์Šค์™€ Collections ํด๋ž˜์Šค์— ๋ชจ๋‘ ํฌํ•จ๋˜์–ด ์žˆ๊ณ  ๊ฐ™์€ ๊ธฐ๋Šฅ ์ˆ˜ํ–‰

์ปฌ๋ ‰์…˜์˜ ๋™๊ธฐํ™”

  • Vector์™€ Hashtable๊ณผ ๊ฐ™์€ JDK1.2 ์ด์ „ ํด๋ž˜์Šค๋“ค์€ ์ž์ฒด์ ์œผ๋กœ ๋™๊ธฐํ™” ์ฒ˜๋ฆฌ
    • ์ƒˆ๋กœ ์ถ”๊ฐ€๋œ ์ปฌ๋ ‰์…˜๋“ค์€ Collections์˜ ๋™๊ธฐํ™” ๋ฉ”์„œ๋“œ๋ฅผ ์ด์šฉํ•ด์„œ ๋™๊ธฐํ™” ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋„๋ก ๋ณ€๊ฒฝ
  • synchronize~๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋ฉ”์„œ๋“œ๋กœ ๋™๊ธฐํ™” ์ œ๊ณต

๋ณ€๊ฒฝ ๋ถˆ๊ฐ€ ์ปฌ๋ ‰์…˜ ๋งŒ๋“ค๊ธฐ

  • ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ธฐ ์ „์šฉ์œผ๋กœ ๋งŒ๋“ค์–ด์„œ ๋ณดํ˜ธํ•˜๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉ
    • ์ฃผ๋กœ ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ํ•˜๋‚˜์˜ ์ปฌ๋ ‰์…˜์„ ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๊ฐ€ ๊ณต์œ ํ•  ๋•Œ ์‚ฌ์šฉ
  • unmodifiable~๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋ฉ”์„œ๋“œ ์‚ฌ์šฉ

์‹ฑ๊ธ€ํ†ค ์ปฌ๋ ‰์…˜ ๋งŒ๋“ค๊ธฐ

  • ๋‹จ ํ•˜๋‚˜์˜ ๊ฐ์ฒด๋งŒ์„ ์ €์žฅํ•˜๋Š” ์ปฌ๋ ‰์…˜์„ ๋งŒ๋“ค ๋•Œ ์‚ฌ์šฉ
  • singleton~์œผ๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋ฉ”์„œ๋“œ ์‚ฌ์šฉ

ํ•œ ์ข…๋ฅ˜์˜ ๊ฐ์ฒด๋งŒ ์ €์žฅํ•˜๋Š” ์ปฌ๋ ‰์…˜ ๋งŒ๋“ค๊ธฐ

  • ์ปฌ๋ ‰์…˜์— ์ง€์ •๋œ ์ข…๋ฅ˜์˜ ๊ฐ์ฒด๋งŒ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋„๋ก ์ œํ•œํ•  ๋•Œ ์‚ฌ์šฉ
  • checked~๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋ฉ”์„œ๋“œ ์‚ฌ์šฉ
  • ์ œ๋„ค๋ฆญ์„ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ„๋‹จํžˆ ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ํ˜ธํ™˜์„ฑ์„ ์œ„ํ•ด์„œ ์ œ๊ณต
    • JDK 1.5 ์ด์ „์— ์ž‘์„ฑ๋œ ์ฝ”๋“œ๋Š” ํ•ด๋‹น ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉ

1.14 ์ปฌ๋ ‰์…˜ ํด๋ž˜์Šค ์ •๋ฆฌ & ์š”์•ฝ

  • ArrayList
    • ๋ฐฐ์—ด ๊ธฐ๋ฐ˜
    • ๋ฐ์ดํ„ฐ์˜ ์ถ”๊ฐ€์™€ ์‚ญ์ œ์— ๋ถˆ๋ฆฌ
    • ์ˆœ์ฐจ์ ์ธ ์ถ”๊ฐ€ ์‚ญ์ œ๋Š” ์ œ์ผ ๋น ๋ฆ„
    • ์ž„์˜์˜ ์š”์†Œ์— ๋Œ€ํ•œ ์ ‘๊ทผ์„ฑ์ด ๋›ฐ์–ด๋‚จ
  • LinkedList
    • ์—ฐ๊ฒฐ ๊ธฐ๋ฐ˜
    • ๋ฐ์ดํ„ฐ์˜ ์ถ”๊ฐ€์™€ ์‚ญ์ œ์— ์œ ๋ฆฌ
    • ์ž„์˜์˜ ์š”์†Œ์— ๋Œ€ํ•œ ์ ‘๊ทผ์„ฑ์ด ์ข‹์ง€ ์•Š์Œ
  • HashMap
    • ๋ฐฐ์—ด๊ณผ ์—ฐ๊ฒฐ์ด ๊ฒฐํ•ฉ๋œ ํ˜•ํƒœ
    • ์ถ”๊ฐ€, ์‚ญ์ œ, ๊ฒ€์ƒ‰, ์ ‘๊ทผ์„ฑ์ด ๋ชจ๋‘ ๋›ฐ์–ด๋‚จ
    • ๊ฒ€์ƒ‰์—๋Š” ์ตœ๊ณ  ์„ฑ๋Šฅ
  • TreeMap
    • ์—ฐ๊ฒฐ ๊ธฐ๋ฐ˜, ์ •๋ ฌ๊ณผ ๊ฒ€์ƒ‰(ํŠนํžˆ ๋ฒ”์œ„ ๊ฒ€์ƒ‰)์— ์ ํ•ฉ
    • ๊ฒ€์ƒ‰ ์„ฑ๋Šฅ์€ HashMap๋ณด๋‹ค ๋–จ์–ด์ง
  • Stack
    • Vector๋ฅผ ์ƒ์†๋ฐ›์•„ ๊ตฌํ˜„
  • Queue
    • LinkedList๊ฐ€ Queue ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„
  • Properties
    • Hashtable์„ ์ƒ์†๋ฐ›์•„ ๊ตฌํ˜„
  • HashSet
    • HashMap์„ ์ด์šฉํ•ด์„œ ๊ตฌํ˜„
  • TreeSet
    • TreeMap์„ ์ด์šฉํ•ด์„œ ๊ตฌํ˜„
  • LinkedHashMap, LinkedHashSet
    • HashMap๊ณผ HashSet์— ์ €์žฅ ์ˆœ์„œ ์œ ์ง€ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€