Live Today

[์ž๋ฃŒ๊ตฌ์กฐ] Array & ArrayList & LinkedList ๋ณธ๋ฌธ

Computer Science/์ž๋ฃŒ๊ตฌ์กฐ

[์ž๋ฃŒ๊ตฌ์กฐ] Array & ArrayList & LinkedList

ilivetoday 2022. 8. 15. 20:19
๋ฐ˜์‘ํ˜•

 

๐Ÿ“Array(๋ฐฐ์—ด)

Array

  • ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ๋ฅผ ํ•˜๋‚˜์˜ ์ด๋ฆ„์œผ๋กœ ๊ทธ๋ฃนํ•‘ํ•ด์„œ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ. index์™€ ๊ฐ’์˜ ์Œ์œผ๋กœ ๊ตฌ์„ฑ
  • index๋Š” ๊ฐ’์— ๋Œ€ํ•œ ์œ ์ผ๋ฌด์ดํ•œ ์‹๋ณ„์ž(๋งˆ์น˜ ์ฃผ๋ฏผ๋ฒˆํ˜ธ)( ๋ฆฌ์ŠคํŠธ์—์„œ ์ธ๋ฑ์Šค๋Š” ๋ช‡ ๋ฒˆ์งธ ๋ฐ์ดํ„ฐ์ธ๊ฐ€ ์ •๋„์˜ ์˜๋ฏธ๋ฅผ ๊ฐ€์ง)
  • ๋…ผ๋ฆฌ์  ์ €์žฅ ์ˆœ์„œ์™€ ๋ฌผ๋ฆฌ์  ์ €์žฅ ์ˆœ์„œ๊ฐ€ ์ผ์น˜ => index๋กœ ํ•ด๋‹น ์›์†Œ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค. (O(1))
  • ์—ฐ์†๋œ ๋ฉ”๋ชจ๋ฆฌ์˜ ๊ณต๊ฐ„์œผ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค.
  • ๋ฐฐ์—ด์€ ์„ ์–ธ๊ณผ ๋™์‹œ์— ํฌ๊ธฐ๋ฅผ ์ง€์ •ํ•˜๋ฉฐ ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋ฅผ ๋ฐ”๊ฟ€ ์ˆ˜ ์—†๋‹ค.

์žฅ์ 

  • ์ธ๋ฑ์Šค๋ฅผ ํ†ตํ•œ ๊ฒ€์ƒ‰์ด ์šฉ์ดํ•จ.
  • ์—ฐ์†์ ์ด๋ฏ€๋กœ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๊ฐ€ ํŽธํ•˜๋‹ค.

๋‹จ์ 

  • ํฌ๊ธฐ๊ฐ€ ๊ณ ์ •๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์–ด๋–ค ์—˜๋ฆฌ๋จผํŠธ๊ฐ€ ์‚ญ์ œ๋˜๋ฉด, ์‚ญ์ œ๋œ ์ƒํƒœ๋ฅผ ๋นˆ ๊ณต๊ฐ„์œผ๋กœ ๋‚จ์œผ๋ฏ€๋กœ ์‚ฝ์ž…/์‚ญ์ œ ์—ฐ์‚ฐ์— ๋ถˆ๋ฆฌํ•จ.
  • ์ •์ ์ด๋ฏ€๋กœ ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋ฅผ ์ปดํŒŒ์ผ ์ด์ „์— ์ •ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.
  • ์ปดํŒŒ์ผ ์ดํ›„ ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋ฅผ ๋ณ€๋™ ํ•  ์ˆ˜ ์—†๋‹ค.

๐Ÿ“List

List

  • ๋ฆฌ์ŠคํŠธ๋Š” ์ˆœ์„œ๊ฐ€ ์žˆ๋Š” ์—˜๋ฆฌ๋จผํŠธ์˜ ๋ชจ์ž„์œผ๋กœ ๋ฐฐ์—ด๊ณผ๋Š” ๋‹ค๋ฅด๊ฒŒ ๋นˆ ์—˜๋ฆฌ๋จผํŠธ๋Š” ์ ˆ๋Œ€ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • ๋ฆฌ์ŠคํŠธ๋Š” ๋ฐฐ์—ด์ด ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์ธ๋ฑ์Šค๋ผ๋Š” ์žฅ์ ์„ ๋ฒ„๋ฆฌ๊ณ  ๋Œ€์‹  ๋นˆํ‹ˆ์—†๋Š” ๋ฐ์ดํ„ฐ์˜ ์ ์žฌ ๋ผ๋Š” ์žฅ์ ์„ ์ทจํ•จ
  • ๋ฆฌ์ŠคํŠธ์—์„œ ์ธ๋ฑ์Šค๋Š” ๋ช‡ ๋ฒˆ์งธ ๋ฐ์ดํ„ฐ์ธ๊ฐ€ ์ •๋„(์ˆœ์„œ)์˜ ์˜๋ฏธ๋ฅผ ๊ฐ€์ง„๋‹ค. (๋ฐฐ์—ด-Array์—์„œ์˜ ์ธ๋ฑ์Šค๋Š” ๊ฐ’์— ๋Œ€ํ•œ ์œ ์ผ๋ฌด์ดํ•œ ์‹๋ณ„์ž)
  • ๋ถˆ์—ฐ์†์ ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ์ฐจ์ง€.
  • ํฌ์ธํ„ฐ๋ฅผ ํ†ตํ•œ ์ ‘๊ทผ

์žฅ์ 

  • ํฌ์ธํ„ฐ๋ฅผ ํ†ตํ•˜์—ฌ ๋‹ค์Œ ๋ฐ์ดํ„ฐ์˜ ์œ„์น˜๋ฅผ ๊ฐ€๋ฅด์ผœ๊ณ  ์žˆ์–ด ์‚ฝ์ž…/์‚ญ์ œ์˜ ์šฉ์ด.
  • ๋™์ ์ด๋ฏ€๋กœ ํฌ๊ธฐ๊ฐ€ ์ •ํ•ด์ ธ ์žˆ์ง€ ์•Š๋‹ค.
  • ๋ฉ”๋ชจ๋ฆฌ์˜ ์žฌ์‚ฌ์šฉ ํŽธ๋ฆฌ
  • ๋ถˆ์—ฐ์†์ ์ด๋ฏ€๋กœ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ์˜ ํŽธ๋ฆฌ

๋‹จ์ 

  • ๊ฒ€์ƒ‰ ์„ฑ๋Šฅ์ด ์ข‹์ง€ ์•Š๋‹ค.
  • ํฌ์ธํ„ฐ๋ฅผ ํ†ตํ•ด ๋‹ค์Œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€๋ฅดํ‚ค๋ฏ€๋กœ ์ถ”๊ฐ€์ ์ธ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„ ๋ฐœ์ƒ.

โœ”๏ธ ๋ฐฐ์—ด vs ๋ฆฌ์ŠคํŠธ ์ •๋ฆฌ

๋ฐฐ์—ด : ๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ๊ฐ€ ์ •ํ•ด์ ธ ์žˆ๊ณ , ์ถ”๊ฐ€์ ์ธ ์‚ฝ์ž… ์‚ญ์ œ๊ฐ€ ์ผ์–ด ๋‚˜์ง€ ์•Š์œผ๋ฉฐ ๊ฒ€์ƒ‰์„ ํ•„์š”๋กœ ํ•  ๋•Œ ์œ ๋ฆฌ.

๋ฆฌ์ŠคํŠธ : ๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ๊ฐ€ ์ •ํ•ด์ ธ ์žˆ์ง€ ์•Š๊ณ , ์‚ฝ์ž… ์‚ญ์ œ๊ฐ€ ๋งŽ์ด ์ผ์–ด๋‚˜๋ฉฐ, ๊ฒ€์ƒ‰์ด ์ ์€ ๊ฒฝ์šฐ ์œ ๋ฆฌ.


Java์—์„œ ๊ธฐ๋ณธํ˜•(int, boolean, String, char) ๋˜๋Š” ์ธ์Šคํ„ด์Šค๋ฅผ ๋ฆฌ์ŠคํŠธ๋กœ ์ €์žฅํ•˜๋Š”๋ฐ๋Š” ๋ณดํ†ต ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•œ๋‹ค. ํ•˜์ง€๋งŒ ๋ฐฐ์—ด์€ ์„ ์–ธ์‹œ์— ํฌ๊ธฐ๋ฅผ ์ •ํ•ด์ค˜์•ผ ํ•˜๋ฏ€๋กœ, ๋™์ ์œผ๋กœ ์š”์†Œ์˜ ์ถ”๊ฐ€๋‚˜ ์‚ญ์ œ ๋“ฑ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค๋Š”๋ฐ ๊ทธ ๋‹จ์ ์ด ์žˆ๋‹ค. ๋งŒ์•ฝ ๋ฐฐ์—ด์˜ ์›์†Œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œํ•˜๋ ค๋ฉด, ์ง์ ‘ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์„ ์„ ์–ธํ•ด์ฃผ์–ด์„œ ์นดํ”ผํ•˜๋Š” ์‹์œผ๋กœ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค. ์ง€์†์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ•ด์•ผ๋˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ๋‚˜, ์–ด๋–ค ํ”„๋กœ๊ทธ๋žจ์˜ ๊ตฌํ˜„์—์„œ ์ด๋Š” ๊ฝค๋‚˜ ํฐ ๋ถˆํŽธํ•จ์œผ๋กœ ๋‹ค๊ฐ€์˜จ๋‹ค.

 

์ด๋Ÿฌํ•œ ๋ถˆํŽธํ•จ์„ ํ•ด์†Œ์‹œ์ผœ์ฃผ๋Š” ๊ฒƒ์ด List ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ƒ์†ํ•˜์—ฌ ๊ตฌํ˜„๋œ ArrayList์™€ LinkedList ํด๋ž˜์Šค์ด๋‹ค. ์ด ๋‘˜์€ ๋ชจ๋‘ Collections ๊ฐ์ฒด์˜ ์ผ์ข…์ด๋‹ค. ์ด ๋‘ ๊ฐ€์ง€ ๋ฆฌ์ŠคํŠธ๋Š” ๋™์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด ์ƒˆ๋กœ์šด ๊ฐ’์˜ ์ถ”๊ฐ€๋‚˜ ์ œ๊ฑฐ๊ฐ€ ์œ ์šฉํ•˜์—ฌ ๊ธฐ๋ณธ ๋ฐฐ์—ด์˜ ๋‹จ์ ์„ ์ปค๋ฒ„ํ•ด์ค€๋‹ค.

 

Java List Collection

  • List๋Š” Collection ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ™•์žฅํ•œ ์ž๋ฃŒํ˜•์œผ๋กœ ๋™์ผํ•œ ๋ฐ์ดํ„ฐ์˜ ์ค‘๋ณต ์ž…๋ ฅ์ด ๊ฐ€๋Šฅํ•˜๋ฉฐ ์ˆœ์ฐจ์ ์ด๊ณ  ๋‹ค๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ž…๋ ฅํ•  ๋•Œ ์ฃผ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ข…๋ฅ˜๋Š” Vector, Arraylist, Linkedlist๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ“ArrayList

  • ์ผ๋ฐ˜ ๋ฐฐ์—ด๊ณผ ArrayList๋Š” ์ธ๋ฑ์Šค๋กœ ๊ฐ์ฒด๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค๋Š” ์ ์—์„œ ๋™์ผํ•˜์ง€๋งŒ, ํฌ๊ธฐ๋ฅผ ๋™์ ์œผ๋กœ ๋Š˜๋ฆด ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์—์„œ ์ฐจ์ด์ ์ด ์žˆ๋‹ค.
  • ArrayList๋Š” ๋‚ด๋ถ€์—์„œ ์ฒ˜์Œ ์„ค์ •ํ•œ ์ €์žฅ ์šฉ๋Ÿ‰(capacity)๊ฐ€ ์žˆ๋‹ค. ์„ค์ •ํ•œ ์ €์žฅ ์šฉ๋Ÿ‰ ํฌ๊ธฐ๋ฅผ ๋„˜์–ด์„œ ๋” ๋งŽ์€ ๊ฐ์ฒด๊ฐ€ ๋“ค์–ด์˜ค๊ฒŒ ๋˜๋ฉด, ๋ฐฐ์—ด ํฌ๊ธฐ๋ฅผ 1.5๋ฐฐ๋กœ ์ฆ๊ฐ€์‹œํ‚ด.
  • ๋ฐฐ์—ด์„ ์ด์šฉํ•ด ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ตฌํ˜„ํ•œ ๊ฒƒ
  • ์ ‘๊ทผ์ด ๋น ๋ฆ„(์ˆœ์ฐจ x) ํ•˜์ง€๋งŒ ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€์™€ ์‚ญ์ œ๊ฐ€ ๋Š๋ฆผ
  • ๋™์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ํž˜๋“ฌ(์ž๋ฐ”์˜ ๊ฒฝ์šฐ ์ž๋™์œผ๋กœ ์‚ฌ์ด์ฆˆ๋ฅผ ํ‚ค์›Œ์„œ ๊ด€๋ฆฌํ•œ๋‹ค. → Dynamic Array)

๐Ÿ“LinkedList

  • ๋…ธ๋“œ ๊ฐ„์— ์—ฐ๊ฒฐ(link)์„ ํ†ตํ•ด์„œ ๋ฆฌ์ŠคํŠธ๋กœ ๊ตฌํ˜„๋œ ๊ฐ์ฒด์ด๋‹ค.
  • ๋‹ค์Œ ๋…ธ๋“œ์˜ ์œ„์น˜ ์ •๋ณด๋งŒ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ ์ธ๋ฑ์Šค๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ํƒ์ƒ‰์‹œ ์ˆœ์ฐจ์ ‘๊ทผ๋งŒ ๊ฐ€๋Šฅ (๋…ธ๋“œ ํƒ์ƒ‰ ์‹œ ์‹œ๊ฐ„์ด ๋งŽ์ด ์†Œ์š”๋  ์ˆ˜ ์žˆ์Œ)(randomAccess ๋ถˆ๊ฐ€๋Šฅ)
  • ๋…ธ๋“œ ์ถ”๊ฐ€/์‚ญ์ œ๋Š” ์œ„์น˜์ •๋ณด์˜ ์ˆ˜์ •๋งŒ์œผ๋กœ ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์„ฑ๋Šฅ์ด ์ข‹์Œ
  • LinkedList๋Š” ArrayList์™€๋Š” ๋‹ฌ๋ฆฌ List ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ AbstractList๋ฅผ ์ƒ์†ํ•˜์ง€ ์•Š๊ณ  AbstractSequentialList๋ฅผ ์ƒ์†ํ•œ๋‹ค.

๐ŸŒ ์ฐธ๊ณ  ๋งํฌ

[ ์ž๋ฃŒ๊ตฌ์กฐ ] ๋ฐฐ์—ด(Array) vs ๋ฆฌ์ŠคํŠธ(List) - ํŠน์ง•, ์ฐจ์ด

[์ž๋ฃŒ๊ตฌ์กฐ]Array์™€ List(๊ทธ๋ฆฌ๊ณ  Java List)

[Java] Array์™€ List ์ƒํ™ฉ๋ณ„ ์„ฑ๋Šฅ ๋น„๊ต

[Java] ArrayList, LinkedList ์ฐจ์ด