Java Collection Framework

Collection

์ปจํ…Œ์ด๋„ˆ๋ผ๊ณ ๋„ ํ•˜๋Š” ์ปฌ๋ ‰์…˜์€ ๋‹จ์ˆœํžˆ ์—ฌ๋Ÿฌ ์š”์†Œ๋ฅผ ๋‹จ์ผ ๋‹จ์œ„๋กœ ๊ทธ๋ฃนํ™”ํ•˜๋Š” ๊ฐœ์ฒด์ž…๋‹ˆ๋‹ค. ์ปฌ๋ ‰์…˜์€ ์ง‘๊ณ„ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅ, ๊ฒ€์ƒ‰, ์กฐ์ž‘ ๋ฐ ์ „๋‹ฌํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ปฌ๋ ‰์…˜์€ ์ง‘๊ณ„ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅ, ๊ฒ€์ƒ‰, ์กฐ์ž‘ ๋ฐ ์ „๋‹ฌํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ํฌ์ปค ํ•ธ๋“œ(์นด๋“œ ๋ชจ์Œ), ๋ฉ”์ผ ํด๋”(๋ฌธ์ž ๋ชจ์Œ) ๋˜๋Š” ์ „ํ™”๋ฒˆํ˜ธ๋ถ€(์ „ํ™” ๋ฒˆํ˜ธ์— ๋Œ€ํ•œ ์ด๋ฆ„ ๋งคํ•‘)์™€ ๊ฐ™์€ ์ž์—ฐ ๊ทธ๋ฃน์„ ํ˜•์„ฑํ•˜๋Š” ๋ฐ์ดํ„ฐ ํ•ญ๋ชฉ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

Data structure

์ผ๋ฐ˜์ ์œผ๋กœ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ํšจ์œจ์ ์ธ ์ ‘๊ทผ์„ ์œ„ํ•ด ์„ ํƒ๋˜๋Š” ๋ฐ์ดํ„ฐ ๊ตฌ์„ฑ, ๊ด€๋ฆฌ ๋ฐ ์ €์žฅ ํ˜•์‹์ž…๋‹ˆ๋‹ค. ๋ณด๋‹ค ์ •ํ™•ํ•˜๊ฒŒ๋Š” ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋Š” ๋ฐ์ดํ„ฐ ๊ฐ’๋“ค๊ณผ ๊ทธ๋“ค ์‚ฌ์ด์˜ ๊ด€๊ณ„ ๋ฐ ๋ฐ์ดํ„ฐ์— ์ ์šฉ๋  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์ด๋‚˜ ์—ฐ์‚ฐ์˜ ์ง‘ํ•ฉ์ด๋‹ค.

What Is a Collections Framework?

์ปฌ๋ ‰์…˜ ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ์ปฌ๋ ‰์…˜์„ ํ‘œํ˜„ํ•˜๊ณ  ์กฐ์ž‘ํ•˜๊ธฐ ์œ„ํ•œ ํ†ตํ•ฉ ์•„ํ‚คํ…์ฒ˜์ž…๋‹ˆ๋‹ค. ๋ชจ๋“  ์ปฌ๋ ‰์…˜ ํ”„๋ ˆ์ž„์›Œํฌ์—๋Š” ๋‹ค์Œ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

  • Interfaces: ์ปฌ๋ ‰์…˜์„ ๋‚˜ํƒ€๋‚ด๋Š” ์ถ”์ƒ ๋ฐ์ดํ„ฐ ์œ ํ˜•์ž…๋‹ˆ๋‹ค. ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ปฌ๋ ‰์…˜์„ ํ‘œํ˜„์˜ ์„ธ๋ถ€ ์‚ฌํ•ญ๊ณผ ๋…๋ฆฝ์ ์œผ๋กœ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ์ฒด ์ง€ํ–ฅ ์–ธ์–ด์—์„œ ์ธํ„ฐํŽ˜์ด์Šค๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๊ณ„์ธต ๊ตฌ์กฐ๋ฅผ ํ˜•์„ฑํ•ฉ๋‹ˆ๋‹ค.

  • Implementations: ์ปฌ๋ ‰์…˜ ์ธํ„ฐํŽ˜์ด์Šค์˜ ๊ตฌ์ฒด์ ์ธ ๊ตฌํ˜„์ž…๋‹ˆ๋‹ค. ๋ณธ์งˆ์ ์œผ๋กœ ์ด๋“ค์€ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.

  • Algorithms: ์ปฌ๋ ‰์…˜ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๊ฐ์ฒด์—์„œ ๊ฒ€์ƒ‰ ๋ฐ ์ •๋ ฌ๊ณผ ๊ฐ™์€ ์œ ์šฉํ•œ ๊ณ„์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฉ”์„œ๋“œ์ž…๋‹ˆ๋‹ค. ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋‹คํ˜•์„ฑ(polymorphic)์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ์ ์ ˆํ•œ ์ปฌ๋ ‰์…˜ ์ธํ„ฐํŽ˜์ด์Šค์˜ ๋‹ค์–‘ํ•œ ๊ตฌํ˜„์—์„œ ๋™์ผํ•œ ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณธ์งˆ์ ์œผ๋กœ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.

ํ•ต์‹ฌ Collection Interfaces

Collection

  • Collection ๊ณ„์ธต ๊ตฌ์กฐ์˜ root์ž…๋‹ˆ๋‹ค. Collection์€ ์š”์†Œ๋กœ ์•Œ๋ ค์ง„ ๊ฐ์ฒด์˜ ๊ทธ๋ฃน๋‹ˆ๋‹ค. Collection ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๋ชจ๋“  collections์ด ๊ตฌํ˜„ํ•˜๋Š” ์ตœ์†Œ ๊ณตํ†ต ์š”์†Œ์ด๋ฉฐ ์ตœ๋Œ€ ์ผ๋ฐ˜์„ฑ์ด ํ•„์š”ํ•  ๋•Œ collections์„ ์ „๋‹ฌํ•˜๊ณ  ์กฐ์ž‘ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ผ๋ถ€ ์œ ํ˜•์˜ ์ปฌ๋ ‰์…˜์€ ์ค‘๋ณต ์š”์†Œ๋ฅผ ํ—ˆ์šฉํ•˜๊ณ  ์ผ๋ถ€๋Š” ํ—ˆ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ผ๋ถ€๋Š” ์ •๋ ฌ๋˜์—ฌ ์žˆ๊ณ  ์ผ๋ถ€๋Š” ์ •๋ ฌ๋˜์—ฌ ์žˆ์ง€ ์•Š๋‹ค. Java ํ”Œ๋žซํผ์€ ์ด ์ธํ„ฐํŽ˜์ด์Šค์˜ ์ง์ ‘์ ์ธ ๊ตฌํ˜„์„ ์ œ๊ณตํ•˜์ง€ ์•Š์ง€๋งŒ Set ๋ฐ List์™€ ๊ฐ™์€ ๋ณด๋‹ค ๊ตฌ์ฒด์ ์ธ ํ•˜์œ„ ์ธํ„ฐํŽ˜์ด์Šค์˜ ๊ตฌํ˜„์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

Set

  • ์ค‘๋ณต ์š”์†Œ๋ฅผ ํฌํ•จํ•  ์ˆ˜ ์—†๋Š” ์ปฌ๋ ‰์…˜์ž…๋‹ˆ๋‹ค. ์ด ์ธํ„ฐํŽ˜์ด์Šค๋Š” ์ˆ˜ํ•™์  ์ง‘ํ•ฉ ์ถ”์ƒํ™”๋ฅผ ๋ชจ๋ธ๋งํ•˜๊ณ  ํฌ์ปค ํ•ธ๋“œ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ์นด๋“œ, ํ•™์ƒ์˜ ์ผ์ •์„ ๊ตฌ์„ฑํ•˜๋Š” ๊ณผ์ • ๋˜๋Š” ๊ธฐ๊ณ„์—์„œ ์‹คํ–‰๋˜๋Š” ํ”„๋กœ์„ธ์Šค์™€ ๊ฐ™์€ ์ง‘ํ•ฉ์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

List

  • ์ •๋ ฌ๋œ ์ปฌ๋ ‰์…˜(์‹œํ€€์Šค๋ผ๊ณ ๋„ ํ•จ). Lists์—๋Š” ์ค‘๋ณต ์š”์†Œ๊ฐ€ ํฌํ•จ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. List์˜ ์‚ฌ์šฉ์ž๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ list์—์„œ ๊ฐ ์š”์†Œ๊ฐ€ ์‚ฝ์ž…๋˜๋Š” ์œ„์น˜๋ฅผ ์ •ํ™•ํ•˜๊ฒŒ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ •์ˆ˜ ์ธ๋ฑ์Šค(์œ„์น˜)๋กœ ์š”์†Œ์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Queue

  • ์ฒ˜๋ฆฌํ•˜๊ธฐ ์ „์— ์—ฌ๋Ÿฌ ์š”์†Œ๋ฅผ ๋ณด์œ ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ์ปฌ๋ ‰์…˜์ž…๋‹ˆ๋‹ค. ๊ธฐ๋ณธ Collection operations ์™ธ์—๋„ Queue๋Š” ์ถ”๊ฐ€ ์‚ฝ์ž…, ์ถ”์ถœ ๋ฐ ๊ฒ€์‚ฌ operations์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

  • Queues์€ ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฐ˜๋“œ์‹œ ๊ทธ๋Ÿฐ ๊ฒƒ์€ ์•„๋‹ˆ์ง€๋งŒ FIFO(์„ ์ž…์„ ์ถœ) ๋ฐฉ์‹์œผ๋กœ ์š”์†Œ๋ฅผ ์ •๋ ฌํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ์™ธ ์ค‘์—๋Š” ์ œ๊ณต๋œ comparator ๋˜๋Š” ์š”์†Œ์˜ natural ์ˆœ์„œ์— ๋”ฐ๋ผ ์š”์†Œ๋ฅผ ์ •๋ ฌํ•˜๋Š” priority queues์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ๋œ ์ˆœ์„œ๊ฐ€ ๋ฌด์—‡์ด๋“  queue์˜ ํ—ค๋“œ๋Š” remove ๋˜๋Š” poll ํ˜ธ์ถœ์— ์˜ํ•ด ์ œ๊ฑฐ๋˜๋Š” ์š”์†Œ์ž…๋‹ˆ๋‹ค. FIFO queue์—์„œ ๋ชจ๋“  ์ƒˆ ์š”์†Œ๋Š” queue์˜ ๋์— ์‚ฝ์ž…๋ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์ข…๋ฅ˜์˜ queues์€ ๋‹ค๋ฅธ ๋ฐฐ์น˜ ๊ทœ์น™์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  Queue ๊ตฌํ˜„์€ ์ˆœ์„œ ์ง€์ • ์†์„ฑ์„ ์ง€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Deque

  • ์ฒ˜๋ฆฌํ•˜๊ธฐ ์ „์— ์—ฌ๋Ÿฌ ์š”์†Œ๋ฅผ ๋ณด์œ ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ์ปฌ๋ ‰์…˜์ž…๋‹ˆ๋‹ค. ๊ธฐ๋ณธ Collection operations ์™ธ์—๋„ Deque๋Š” ์ถ”๊ฐ€ ์‚ฝ์ž…, ์ถ”์ถœ ๋ฐ ๊ฒ€์‚ฌ operations์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

  • Deques๋Š” FIFO(์„ ์ž…์„ ์ถœ) ๋ฐ LIFO(ํ›„์ž…์„ ์ถœ) ๋ฐฉ์‹์„ ๋ชจ๋‘ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. deque์—์„œ ๋ชจ๋“  ์ƒˆ ์š”์†Œ๋Š” ์–‘์ชฝ ๊ธ‘์—์„œ ์‚ฝ์ž…, ๊ฒ€์ƒ‰ ๋ฐ ์ œ๊ฑฐ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Map

  • ํ‚ค๋ฅผ ๊ฐ’์— ๋งคํ•‘ํ•˜๋Š” ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค. Map์—๋Š” ์ค‘๋ณต ํ‚ค๊ฐ€ ํฌํ•จ๋  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๊ฐ ํ‚ค๋Š” ์ตœ๋Œ€ ํ•˜๋‚˜์˜ ๊ฐ’์— ๋งคํ•‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

SortedSet

  • ์š”์†Œ๋ฅผ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์œ ์ง€ํ•˜๋Š” Set์ž…๋‹ˆ๋‹ค. ์ •๋ ฌ์„ ํ™œ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๋ช‡ ๊ฐ€์ง€ ์ถ”๊ฐ€ ์ž‘์—…์ด ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.Sorted sets์€ ๋‹จ์–ด ๋ชฉ๋ก ๋ฐ ํšŒ์› ๋ชฉ๋ก๊ณผ ๊ฐ™์ด naturally ์ •๋ ฌ๋œ ์ง‘ํ•ฉ์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

SortedMap

  • ์˜ค๋ฆ„์ฐจ์ˆœ ํ‚ค ์ˆœ์„œ๋กœ ๋งคํ•‘์„ ์œ ์ง€ ๊ด€๋ฆฌํ•˜๋Š” Map์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ SortedSet์˜ Map ์•„๋‚ ๋กœ๊ทธ์ž…๋‹ˆ๋‹ค. ์ •๋ ฌ๋œ Map์€ ์‚ฌ์ „ ๋ฐ ์ „ํ™”๋ฒˆํ˜ธ๋ถ€์™€ ๊ฐ™์ด ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์ •๋ ฌ๋œ ํ‚ค/๊ฐ’ ์Œ ๋ชจ์Œ์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

๊ตฌ์กฐ

Java Collection Framework

Benefits of the Java Collections Framework

Java ์ปฌ๋ ‰์…˜ ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ด์ ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

  • ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋…ธ๋ ฅ์„ ๊ฐ์†Œ: Collections Framework๋Š” ์œ ์šฉํ•œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์™€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ œ๊ณตํ•จ์œผ๋กœ์จ ํ”„๋กœ๊ทธ๋žจ ์ž‘๋™์— ํ•„์š”ํ•œ ๋‚ฎ์€ ์ˆ˜์ค€์˜ "๋ฐฐ๊ด€"์ด ์•„๋‹Œ ํ”„๋กœ๊ทธ๋žจ์˜ ์ค‘์š”ํ•œ ๋ถ€๋ถ„์— ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ค๋‹ˆ๋‹ค.

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

  • ๊ด€๋ จ ์—†๋Š” APIs ๊ฐ„์˜ ์ƒํ˜ธ ์šด์šฉ์„ฑ์„ ํ—ˆ์šฉ: Collection ์ธํ„ฐํŽ˜์ด์Šค๋Š” APIs๊ฐ€ Collection์„ ์•ž๋’ค๋กœ ์ „๋‹ฌํ•˜๋Š” ์ „๋ฌธ์–ธ์–ด์ž…๋‹ˆ๋‹ค. ๋‚ด ๋„คํŠธ์›Œํฌ ๊ด€๋ฆฌ API๊ฐ€ ๋…ธ๋“œ ์ด๋ฆ„ ๋ชจ์Œ์„ ์ œ๊ณตํ•˜๊ณ  GUI ๋„๊ตฌ ํ‚คํŠธ๊ฐ€ ์—ด ๋จธ๋ฆฌ๊ธ€ ๋ชจ์Œ์„ ์˜ˆ์ƒํ•˜๋Š” ๊ฒฝ์šฐ API๋Š” ๋…๋ฆฝ์ ์œผ๋กœ ์ž‘์„ฑ๋˜์—ˆ๋”๋ผ๋„ ์›ํ™œํ•˜๊ฒŒ ์ƒํ˜ธ ์šด์šฉ๋ฉ๋‹ˆ๋‹ค.

  • ์ƒˆ๋กœ์šด APIs๋ฅผ ๋ฐฐ์šฐ๊ณ  ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ๋…ธ๋ ฅ ๊ฐ์†Œ: ๋งŽ์€ API๋Š” ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์ž…๋ ฅ์— ๋Œ€ํ•œ ์ปฌ๋ ‰์…˜์„ ๊ฐ€์ ธ์™€ ์ถœ๋ ฅ์œผ๋กœ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๊ณผ๊ฑฐ์—๋Š” ์ด๋Ÿฌํ•œ ๊ฐ API์— ์ปฌ๋ ‰์…˜ ์กฐ์ž‘์„ ์ „๋‹ดํ•˜๋Š” ์ž‘์€ ํ•˜์œ„ API๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ž„์‹œ ์ปฌ๋ ‰์…˜ ํ•˜์œ„ API ๊ฐ„์—๋Š” ์ผ๊ด€์„ฑ์ด ๊ฑฐ์˜ ์—†์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ฒ˜์Œ๋ถ€ํ„ฐ ํ•˜๋‚˜์”ฉ ๋ฐฐ์›Œ์•ผ ํ–ˆ๊ณ  ์‚ฌ์šฉํ•  ๋•Œ ์‹ค์ˆ˜ํ•˜๊ธฐ ์‰ฌ์› ์Šต๋‹ˆ๋‹ค. ํ‘œ์ค€ collection ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ๋“ฑ์žฅํ•˜๋ฉด์„œ ๋ฌธ์ œ๊ฐ€ ์‚ฌ๋ผ์กŒ์Šต๋‹ˆ๋‹ค.

  • ์ƒˆ๋กœ์šด API ์„ค๊ณ„ ๋…ธ๋ ฅ ๊ฐ์†Œ: ๋””์ž์ด๋„ˆ์™€ ๊ตฌํ˜„์ž๋Š” ์ปฌ๋ ‰์…˜์— ์˜์กดํ•˜๋Š” API๋ฅผ ๋งŒ๋“ค ๋•Œ๋งˆ๋‹ค ๋ฐ”ํ€ด๋ฅผ ์žฌ๋ฐœ๋ช…ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๋Œ€์‹  ํ‘œ์ค€ ์ปฌ๋ ‰์…˜ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์†Œํ”„ํŠธ์›จ์–ด ์žฌ์‚ฌ์šฉ ์ด‰์ง„: ํ‘œ์ค€ ์ปฌ๋ ‰์…˜ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ค€์ˆ˜ํ•˜๋Š” ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋Š” ๋ณธ์งˆ์ ์œผ๋กœ ์žฌ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๊ฐ์ฒด์—์„œ ์ž‘๋™ํ•˜๋Š” ์ƒˆ๋กœ์šด ์•Œ๊ณ ๋ฆฌ์ฆ˜๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค.

ArrayList VS Vector

point
ArrayList
Vector

synchronization

no

synchronized

size growth

increases only by half of its length

doubles its size

iteration

can only use Iterator

can use iterator and Enumeration

performance

faster

slower(due to synchronization)

framework

Collections

legacy class

Arrays VS Collection

No.
Arrays
Collection Framework

1

๋ฐฐ์—ด์€ ํฌ๊ธฐ๊ฐ€ ๊ณ ์ •๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ ์ผ๋‹จ ๋ฐฐ์—ด์„ ๋งŒ๋“ค๋ฉด ์š”๊ตฌ ์‚ฌํ•ญ์— ๋”ฐ๋ผ ๋Š˜๋ฆฌ๊ฑฐ๋‚˜ ์ค„์ผ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์ปฌ๋ ‰์…˜์€ ์šฐ๋ฆฌ์˜ ์š”๊ตฌ ์‚ฌํ•ญ์— ๋”ฐ๋ผ ๋ณธ์งˆ์ ์œผ๋กœ ํ™•์žฅ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํฌ๊ธฐ๋ฅผ ๋Š˜๋ฆฌ๊ฑฐ๋‚˜ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

2

๊ธฐ๋ณธ ์œ ํ˜•(boolean, byte, short, int, long ๋“ฑ)๊ณผ ๊ฐ์ฒด ์œ ํ˜•์„ ๋ชจ๋‘ ๋ณด์œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐ์ฒด ์œ ํ˜•๋งŒ ๋ณด์œ ํ•  ์ˆ˜ ์žˆ์Œ

3

๋ฐฐ์—ด์—๋Š” ๊ธฐ๋ณธ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์ž๋ฐ”์—์„œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๋ฐฐ์—ด ์ž์ฒด์ž…๋‹ˆ๋‹ค.

๋ชจ๋“  Collection ํด๋ž˜์Šค์—๋Š” ๊ธฐ๋ณธ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

4

๋ฐฐ์—ด์—๋Š” ์œ ํ‹ธ๋ฆฌํ‹ฐ ๋ฉ”์„œ๋“œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค

๋ชจ๋“  Collection์€ ์œ ํ‹ธ๋ฆฌํ‹ฐ ๋ฉ”์„œ๋“œ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

Why Collection ?

  1. ๋ฐฐ์—ด์€ ํฌ๊ธฐ๊ฐ€ ๊ณ ์ •๋˜์–ด ์žˆ์œผ๋ฉฐ ๊ฐœ๋ฐœ ๋‹จ๊ณ„์—์„œ๋Š” ํ•ญ์ƒ ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์š”๊ตฌ ์‚ฌํ•ญ์— ๋”ฐ๋ผ ํฌ๊ธฐ๋ฅผ ๋Š˜๋ ค์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ปฌ๋ ‰์…˜์€ ํฌ๊ธฐ๊ฐ€ ๊ณ ์ •๋˜์–ด ์žˆ์ง€ ์•Š๊ณ  ํ™•์žฅ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค(์ตœ๋Œ€ ํฌ๊ธฐ์— ๋„๋‹ฌํ•˜๋ฉด ํฌ๊ธฐ๊ฐ€ ์ฆ๊ฐ€ํ•จ).

  2. ๋ฐฐ์—ด์€ ํ•œ ๊ฐ€์ง€ ์œ ํ˜•์˜ ์š”์†Œ๋งŒ ๋ณด์œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ปฌ๋ ‰์…˜์€ ๋‹ค์–‘ํ•œ ์œ ํ˜•์˜ ์š”์†Œ๋ฅผ ๋ณด์œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  3. ์ •๋ ฌ, ๊ฒ€์ƒ‰ ๋“ฑ์„ ์œ„ํ•œ ๋ฐฐ์—ด์˜ ๊ธฐ๋ณธ ๋ฉ”์„œ๋“œ ์ง€์›์€ ์—†์ง€๋งŒ ์ปฌ๋ ‰์…˜์—๋Š” ๊ธฐ๋ณธ ์œ ํ‹ธ๋ฆฌํ‹ฐ ๋ฉ”์„œ๋“œ ์ง€์›์ด ์žˆ์–ด ๊ฐœ๋ฐœ์ž๊ฐ€ ํŽธ๋ฆฌํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฝ”๋”ฉ ์‹œ๊ฐ„์ด ๋‹จ์ถ•๋ฉ๋‹ˆ๋‹ค.

์‹œ๊ฐ„ ๋ณต์žก๋„

ArrayList VS LinkedList

๋น„๊ต ๋ชฉ๋ก
ArrayList
LinkedList

Add/remove element in the beginning

O(n)

O(1)

Add/remove element in the middle

O(n)

O(1)

Add/remove element in the end

O(1)

O(1)

Get i-th element (random access)

O(1)

O(n)

Find element

O(n), O(log(n)) if sorted

O(n)

Traversal order

์‚ฝ์ž…๋œ ๋Œ€๋กœ

์‚ฝ์ž…๋œ ๋Œ€๋กœ

Set์˜ ๊ตฌํ˜„์ฒด

๋น„๊ต ๋ชฉ๋ก
HashSet
LinkedHashSet
TreeSet
EnumSet

Add element

amoritize O(1)

amoritize O(1)

O(log(n))

O(1)

Remove element

amoritize O(1)

amoritize O(1)

O(log(n))

O(1)

Find Element

O(1)

O(1)

O(log(n))

O(1)

Traversal order

๋ฌด์ž‘์œ„, ํ•ด์‹œ ํ•จ์ˆ˜์— ์˜ํ•ด ํฉ์–ด์ง

์‚ฝ์ž…๋œ ๋Œ€๋กœ

์š”์†Œ ๋น„๊ต ๊ธฐ์ค€์— ๋”ฐ๋ผ ์ •๋ ฌ๋จ

enum ๊ฐ’์˜ ์ •์˜ ์ˆœ์„œ์— ๋”ฐ๋ผ

Map์˜ ๊ตฌํ˜„์ฒด

๋น„๊ต ๋ชฉ๋ก
HashMap
LinkedHashMap
TreeMap
EnumMap

Add element

amoritize O(1)

amoritize O(1)

O(log(n))

O(1)

Remove element

amoritize O(1)

amoritize O(1)

O(log(n))

O(1)

Find element

O(1)

O(1)

O(log(n))

O(1)

Traversal order

๋ฌด์ž‘์œ„, ํ•ด์‹œ ํ•จ์ˆ˜์— ์˜ํ•ด ํฉ์–ด์ง

์‚ฝ์ž…๋œ ๋Œ€๋กœ

์š”์†Œ ๋น„๊ต ๊ธฐ์ค€์— ๋”ฐ๋ผ ์ •๋ ฌ๋จ

enum ๊ฐ’์˜ ์ •์˜ ์ˆœ์„œ์— ๋”ฐ๋ผ

Reference

https://github.com/JaeYeopHan/Interview_Question_for_Beginner/tree/master/Java#collection

https://www.baeldung.com/java-arraylist-vs-vector

https://www.geeksforgeeks.org/difference-between-arrays-and-collection-in-java/

https://en.wikipedia.org/wiki/Data_structure

https://www.baeldung.com/java-choose-list-set-queue-map

https://docs.oracle.com/javase/tutorial/collections/intro/index.html

Last updated

Was this helpful?