Programming/Java

F014 - List (ArrayList, LinkedList, Vector, Stack)

osean 2021. 5. 30. 03:32
โœ๏ธ ์ง€๊ธˆ๊นŒ์ง€ ๊ฐœ๋ฐœ์„ ํ•˜๋ฉด์„œ ๋‹ค์–‘ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ–ˆ์ง€๋งŒ, ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ๋ชจ๋ฅธ ์ฑ„ ์‚ฌ์šฉํ–ˆ์—ˆ๋‹ค.
๊ทธ๋ž˜์„œ ์—ฌ๋Ÿฌ ์ƒํ™ฉ๋“ค ์†์—์„œ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์ ์ ˆํžˆ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋‚จ๋“ค์ด ์“ฐ๋‹ˆ๊นŒ ๋”ฐ๋ผ ์“ฐ๊ณ , ๋‚ด๊ฐ€ ์ต์ˆ™ํ•˜๋‹ˆ๊นŒ ๊ทธ๋ƒฅ ์“ฐ๋Š” ๊ฒƒ์ด ๋ฒ„๋ฆ‡์ด ๋๋‹ค.

์ด๋ฒˆ ์‹œ๊ฐ„์„ ํ†ตํ•ด ๊ฐ€์žฅ ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” List ์ธํ„ฐํŽ˜์ด์Šค์— ๋Œ€ํ•ด ๊ณต๋ถ€ํ•˜๊ณ  ์ด๋ฅผ ๊ตฌํ˜„ํ•œ ArrayList์™€ LinkedList์˜ ์ฐจ์ด๋ฅผ ํ™•์ธํ•ด๋ณด์ž.

List

List(์ดํ•˜ ๋ฆฌ์ŠคํŠธ)๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ค‘๋ณตํ•˜์—ฌ ๋‹ด์„ ์ˆ˜ ์žˆ๊ณ , ๊ฐ์ฒด์— ๋ฐ์ดํ„ฐ๊ฐ€ ๋‹ด๊ธฐ๋Š” ์ˆœ์„œ๋Œ€๋กœ ๋ฉ”๋ชจ๋ฆฌ์— ํ• ๋‹น๋œ๋‹ค๋Š” ํŠน์ง•์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.
์ด๋Ÿฌํ•œ ํŠน์ง• ๋•๋ถ„์— ๋ฐ์ดํ„ฐ๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ์กฐํšŒํ•  ๋•Œ ์ฃผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค. ์ด๋ฅผ ํ™•์žฅํ•œ ํด๋ž˜์Šค๋กœ๋Š” Vector, ArrayList, LinkedList๊ฐ€ ์กด์žฌํ•œ๋‹ค.

Method

๋ฉ”์†Œ๋“œ ์„ค๋ช…
add(E a) ๋งค๊ฐœ ๋ณ€์ˆ˜๋กœ ์ „๋‹ฌ ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ์ฒด์— ๋‹ด๋Š”๋‹ค.
add(Collection<?> c) Collection ํด๋ž˜์Šค๋ฅผ ์ƒ์† ๋ฐ›๋Š” ์ž์‹ ํด๋ž˜์Šค์— ํ•œํ•ด์„œ ๋งค๊ฐœ ๋ณ€์ˆ˜๋กœ ํ—ˆ์šฉํ•˜๊ณ , ์ด๋ฅผ ํ˜„์žฌ ๋ฆฌ์ŠคํŠธ์— ์ˆœ์„œ๋Œ€๋กœ ๋‹ด๋Š”๋‹ค.
set(int index, E element) ๋งค๊ฐœ ๋ณ€์ˆ˜๋กœ ์ „๋‹ฌ ๋ฐ›์€ ์ธ๋ฑ์Šค์— ์ „๋‹ฌ ๋ฐ›์€ ๊ฐ์ฒด๋กœ ๊ต์ฒดํ•œ๋‹ค.
remove(int index) ํ•ด๋‹น ์ธ๋ฑ์Šค์— ๋‹ด๊ธด ๋ฐ์ดํ„ฐ๋ฅผ ๋ฆฌ์ŠคํŠธ ๊ฐ์ฒด ๋‚ด์—์„œ ์‚ญ์ œํ•œ๋‹ค.
remove(Object o) ๊ฐ™์€ ๊ฐ์ฒด๋ฅผ ์ฐพ์•„ ๋ฆฌ์ŠคํŠธ์—์„œ ์‚ญ์ œํ•œ๋‹ค.
clear() ๋ฆฌ์ŠคํŠธ ๊ฐ์ฒด ๋‚ด์— ์กด์žฌํ•˜๋Š” ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์ง€์šด๋‹ค.
size() ๋ฆฌ์ŠคํŠธ ๊ฐ์ฒด์— ๋‹ด๊ธด ๋ฐ์ดํ„ฐ์˜ ๊ฐœ์ˆ˜๋ฅผ int ํƒ€์ž…์œผ๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ์ผ๋ฐ˜์ ์ธ ๋ฐฐ์—ด์˜ length๋Š” ๋ฉ”๋ชจ๋ฆฌ์— ํ• ๋‹น๋œ ๋ฐฐ์—ด์˜ ๊ธธ์ด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์— length์™€ size()๋Š” ๋‹ค๋ฅธ ์˜๋ฏธ๋ฅผ ๊ฐ€์ง„๋‹ค.
isEmpty() ๋ฆฌ์ŠคํŠธ ๊ฐ์ฒด ๋‚ด์— ๋ฐ์ดํ„ฐ์˜ ์กด์žฌ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•˜๊ณ  boolean ํƒ€์ž…์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ํ•˜๋‚˜์˜ ๋ฐ์ดํ„ฐ๋ผ๋„ ์กด์žฌํ•˜๋ฉด true, ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉด false๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
indexOf(Object o) ๋งค๊ฐœ ๋ณ€์ˆ˜๋กœ ์ „๋‹ฌ๋œ ๊ฐ์ฒด๊ฐ€ ๋ฆฌ์ŠคํŠธ์— ๋ช‡ ๋ฒˆ์งธ์— ๋‹ด๊ฒจ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ , ์กด์žฌํ•œ๋‹ค๋ฉด ํ•ด๋‹น ์ธ๋ฑ์Šค ๋ฒˆํ˜ธ๋ฅผ ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด -1์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
lastIndexOf(Object o) ๋ฆฌ์ŠคํŠธ์—์„œ ๋งค๊ฐœ ๋ณ€์ˆ˜๋กœ ์ „๋‹ฌ๋œ ๊ฐ์ฒด์™€ ๋™์ผํ•œ ๊ฐ์ฒด๋“ค ์ค‘ ๋งˆ์ง€๋ง‰ ์ธ๋ฑ์Šค ๋ฒˆํ˜ธ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฉฐ ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด -1์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
contains(Object o) ๋งค๊ฐœ ๋ณ€์ˆ˜๋กœ Object ๋ฅผ ๋ฐ›์œผ๋ฉฐ, ํ•ด๋‹น ๋งค๊ฐœ ๋ณ€์ˆ˜๊ฐ€ ๋ฆฌ์ŠคํŠธ ๊ฐ์ฒด ๋‚ด์— ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.
toArray() ๋ฆฌ์ŠคํŠธ ๊ฐ์ฒด์— ๋‹ด๊ธด ๋ฐ์ดํ„ฐ๋ฅผ Object ๋ฐฐ์—ด๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ํ•ด๋‹น ๋ฐฐ์—ด ๊ฐ์ฒด๋Š” ์ฐธ์กฐ๋˜์ง€ ์•Š๋Š” ๊ฐ์ฒด๋กœ ๋‚ด๋ถ€์— ๋‹ด๊ธด ๋ฐ์ดํ„ฐ์— ์•ˆ์ „ํ•˜๊ฒŒ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๋‹ค. ํ•˜์ง€๋งŒ Object[] ๋กœ ๋ฐ˜ํ™˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ณ„๋„์˜ ์บ์ŠคํŒ…์„ ์ง์ ‘ ํ•ด์ค˜์•ผ ํ•œ๋‹ค.
toArray(T[] a) ๋ฆฌ์ŠคํŠธ ๊ฐ์ฒด์— ๋‹ด๊ธด ๋ฐ์ดํ„ฐ๋ฅผ ๋งค๊ฐœ ๋ณ€์ˆ˜๋กœ ์ „๋‹ฌ ๋ฐ›์€ ๊ฐ์ฒด ํƒ€์ž…์˜ ๋ฐฐ์—ด๋กœ ๋ฐ˜ํ™˜ํ•˜๋ฉฐ, ๋งŒ์•ฝ ๋งค๊ฐœ ๋ณ€์ˆ˜ ๊ฐ์ฒด์˜ ๊ธธ์ด๊ฐ€ ๋ฆฌ์ŠคํŠธ๋ณด๋‹ค ๊ธธ๋‹ค๋ฉด ๋งค๊ฐœ ๋ณ€์ˆ˜ ๊ฐ์ฒด๋งŒํผ์˜ ๋ฐฐ์—ด์„ ๋งŒ๋“ค๊ณ  ๋ฆฌ์ŠคํŠธ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ƒˆ๋กœ ๋งŒ๋“  ๋ฐฐ์—ด์— ์ˆœ์„œ๋Œ€๋กœ ๋‹ด๋Š”๋‹ค. ๋‚˜๋จธ์ง€ ๊ณต๊ฐ„์€ ์•„๋ฌด ๊ฒƒ๋„ ์ฑ„์›Œ์ง€์ง€ ์•Š๊ณ  ๋นˆ ๊ณต๊ฐ„์œผ๋กœ ํ• ๋‹น๋œ๋‹ค.
itertator() List ์ธํ„ฐํŽ˜์ด์Šค๋Š” Collection ํด๋ž˜์Šค๋ฅผ ์ƒ์† ๋ฐ›๊ณ , Collection ํด๋ž˜์Šค๋Š” Iterable ํด๋ž˜์Šค๋ฅผ ์ƒ์† ๋ฐ›๋Š”๋‹ค. Itertable ํด๋ž˜์Šค๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ Iterator ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฅผ ํ†ตํ•ด Itertator ๊ฐ์ฒด๋กœ ์บ์ŠคํŒ…ํ•˜์—ฌ ๊ฐ์ฒด ๋‚ด๋ถ€์— ๋‹ด๊ธด ๋ฐ์ดํ„ฐ๋ฅผ ์ˆœํšŒ ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๋ฐฐ์—ด๊ณผ ๋ฆฌ์ŠคํŠธ ์ž๋ฃŒ๊ตฌ์กฐ์˜ ํŠน์ง•

Array : ๋ฐฐ์—ด

๐Ÿ“ ์ •ํ•ด์ง„ ๊ธธ์ด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

๐Ÿ“ ์ •์ ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ์— ํ• ๋‹นํ•œ๋‹ค.

๐Ÿ“ ๋ฐฐ์—ด์˜ ๊ธธ์ด๋ฅผ ๋™์ ์œผ๋กœ ๋ณ€๊ฒฝ ํ•  ์ˆ˜ ์—†๋‹ค.

๐Ÿ“ ๋ฐฐ์—ด์— ๋‹ด๊ธด ๋ฐ์ดํ„ฐ๋Š” ๋ฉ”๋ชจ๋ฆฌ์— ์—ฐ์†์ ์œผ๋กœ ๋‹ด๊ธฐ๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๊ฐ€ ์šฉ์ดํ•˜๋‹ค.

๐Ÿ“ ๋ฐฐ์—ด์˜ ๋…ผ๋ฆฌ์ ์ธ ์ˆœ์„œ(Index)์™€ ๋ฉ”๋ชจ๋ฆฌ์— ํ• ๋‹น๋œ ๋ฌผ๋ฆฌ์ ์ธ ์ˆœ์„œ(๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ)๊ฐ€ ๋™์ผํ•˜๋‹ค.

๐Ÿ“ ๋ฐฐ์—ด์˜ ๊ธธ์ด๊ฐ€ ์ •ํ•ด์ ธ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฐฐ์—ด์˜ ์ค‘๊ฐ„์— ์œ„์น˜ํ•œ ์ธ๋ฑ์Šค์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•œ๋‹ค๋ฉด, ํ•ด๋‹น ์ธ๋ฑ์Šค๋Š” ๋น„์›Œ์ง€๊ฒŒ ๋œ๋‹ค.

List : ๋ฆฌ์ŠคํŠธ

๐Ÿ“ ์ธ๋ฑ์Šค๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค.

๐Ÿ“ ๋ฐ์ดํ„ฐ์˜ ์ˆœ์„œ๊ฐ€ ์กด์žฌํ•˜๋Š” ์ง‘ํ•ฉ์ด๋‹ค.

๐Ÿ“ ๋ฉ”๋ชจ๋ฆฌ์— ๋น„์—ฐ์†์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ํ• ๋‹น๋œ๋‹ค.

๐Ÿ“ ํฌ์ธํ„ฐ๋ฅผ ์ด์šฉํ•ด์„œ ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•œ๋‹ค.

๐Ÿ“ ๋นˆ ๊ณต๊ฐ„์ด ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์„ ์›์น™์œผ๋กœ ๋ฆฌ์ŠคํŠธ ์ค‘๊ฐ„์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์‚ญ์ œ๋œ๋‹ค๋ฉด ๋นˆ ๊ณต๊ฐ„์„ ์™„์ „ํžˆ ์ •๋ฆฌํ•˜๋ฏ€๋กœ์จ ๋ฆฌ์ŠคํŠธ์˜ ์‚ฌ์ด์ฆˆ๋Š” ์‚ญ์ œ๋œ ๋ฐ์ดํ„ฐ๋งŒํผ ์ค„์–ด๋“ ๋‹ค.

Array.length / List.size()

๐Ÿ”Ž Array.length
 : ๋ฉ”๋ชจ๋ฆฌ์— ํ• ๋‹น๋œ ๋ฐฐ์—ด์˜ ๊ธธ์ด๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

๐Ÿ”Ž List.size()
 : ๋ฆฌ์ŠคํŠธ์— ๋‹ด๊ฒจ์ ธ ์žˆ๋Š” ๋ฐ์ดํ„ฐ์˜ ๊ฐœ์ˆ˜๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

์œ„์—์„œ ์ž ๊น ์‚ดํŽด๋ณธ Array์™€ List์˜ ํŠน์ง•์„ ๋ณด๋ฉด length์™€ size()๊ฐ€ ์™œ ๋‹ค๋ฅธ ์˜๋ฏธ์ธ์ง€ ํŒŒ์•… ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋จผ์ € ๋ฐฐ์—ด์€ ๊ฐ์ฒด๋ฅผ ์„ ์–ธ ํ•  ๋•Œ ๋ฉ”๋ชจ๋ฆฌ์— ํ• ๋‹น ๋  ๊ธธ์ด๋ฅผ ์ •ํ•ด์ค˜์•ผ ํ•˜๋ฉฐ, ๋ฐ์ดํ„ฐ๋“ค์ด ์—ฐ์†์ ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ์— ํ• ๋‹น๋œ๋‹ค.
์ด๋Ÿฌํ•œ ํŠน์ง• ๋•Œ๋ฌธ์— ๋ฐฐ์—ด์— ๋‹ด๊ธด ๋ฐ์ดํ„ฐ๊ฐ€ ์‚ญ์ œ๋˜๋”๋ผ๋„ ๋ฉ”๋ชจ๋ฆฌ์— ํ• ๋‹น๋œ ๋ฐฐ์—ด์˜ ๊ธธ์ด๋Š” ๋ณ€ํ•˜์ง€ ์•Š์•„, ๋ฐ์ดํ„ฐ์˜ ๊ฐœ์ˆ˜๊ฐ€ ์•„๋‹Œ ๋ฉ”๋ชจ๋ฆฌ์— ํ• ๋‹น๋œ ๋ฐฐ์—ด์˜ ๊ธธ์ด๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

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


ArrayList

ArrayList๋Š” List ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค ์ค‘ ํ•˜๋‚˜๋กœ, ๋‚ด๋ถ€์ ์œผ๋กœ ๋ฐฐ์—ด์„ ๋งŒ๋“ค์–ด ์ธ๋ฑ์Šค์™€ ๋ฉ”๋ชจ๋ฆฌ ์—ฐ์†์„ฑ์˜ ํŠน์ง•์„ ๊ฐ€์ง€๋Š” ํด๋ž˜์Šค์ด๋‹ค.

ArrayList ํด๋ž˜์Šค์˜ ๋‚ด๋ถ€๋ฅผ ์ž˜ ์‚ดํŽด๋ณด๋ฉด AbstractList ํด๋ž˜์Šค๋ฅผ ํ™•์žฅํ•˜๊ณ , List ์ธํ„ฐํŽ˜์ด์Šค ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ Serializable, Cloneable, RandomAccess ๋“ฑ์˜ ์ธํ„ฐํŽ˜์ด์Šค๋„ ๊ตฌํ˜„ํ•œ ๊ฒƒ์„ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ๋‹ค.

ํด๋ž˜์Šค / ์ธํ„ฐํŽ˜์ด์Šค ํƒœ๊ทธ ์„ค๋ช…
AbstractList<E> extends ์ด๋ฆ„ ๊ทธ๋Œ€๋กœ List ์ธํ„ฐํŽ˜์ด์Šค์˜ ์ถ”์ƒํ™” ํด๋ž˜์Šค๋กœ ๋ฉ”๋ชจ๋ฆฌ์— ๋žœ๋ค์œผ๋กœ ์—‘์„ธ์Šค๋˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์ตœ์†Œํ•œ์œผ๋กœ ๊ตฌํ˜„ ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค€๋‹ค. ์ฆ‰, ๋ฆฌ์ŠคํŠธ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค๋“ค์˜ ๊ณตํ†ต์ ์ธ ๋ฉ”์†Œ๋“œ๋ฅผ ๋ฏธ๋ฆฌ ๊ตฌํ˜„ํ•ด๋†“์€ ํด๋ž˜์Šค๋ผ๋Š” ์˜๋ฏธ์ด๋‹ค.
List<E> implements ๋ฆฌ์ŠคํŠธ ์ธํ„ฐํŽ˜์ด์Šค ๋‚ด์—์„œ ๋ช…์„ธ ํ•ด๋†“์€ ๋ฉ”์†Œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ , ์‚ฌ์šฉ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.
RandomAccess implements ๋ฆฌ์ŠคํŠธ ๊ฐ์ฒด์— ๋‹ด๊ธด ๋ฐ์ดํ„ฐ์— ๋น ๋ฅด๊ฒŒ ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ง€์ •ํ•œ๋‹ค.
Cloneable implements ๋ณต์ œ๊ฐ€ ๊ฐ€๋Šฅํ•œ ๊ฐ์ฒด์ž„์„ ๋ช…์‹œํ•œ๋‹ค.
Serializable
implements ํŒŒ์ผ์„ ์ €์žฅํ•˜๊ฑฐ๋‚˜ ์™ธ๋ถ€๋กœ ๊ฐ์ฒด์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜๊ธฐ ์œ„ํ•œ ์šฉ๋„๋กœ ์ง๋ ฌํ™”๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค.

ArrayList ํด๋ž˜์Šค๋Š” ์ด๋ฆ„์—์„œ ์•Œ ์ˆ˜ ์žˆ๋“ฏ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค ๋•Œ ๋ฐฐ์—ด์„ ๋งŒ๋“œ๋Š”๋ฐ, ์ด ๋•Œ ๋ณ„๋„์˜ capacity ๊ฐ’์„ ์ง€์ •ํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ๊ธธ์ด๊ฐ€ 10์ธ ๋ฐฐ์—ด์„ ์ƒ์„ฑํ•œ๋‹ค.

// ๊ธฐ๋ณธ ๋ฐฐ์—ด ๊ธธ์ด
private static final int DEFAULT_CAPACITY = 10;
// ์ƒ์„ฑ๋˜๋Š” Object[]
transient Object[] elementData;

// ๊ธฐ๋ณธ ์ƒ์„ฑ์ž
public ArrayList() {
        this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;
    }

// ๋งค๊ฐœ ๋ณ€์ˆ˜๋กœ capacity๋ฅผ ์ „ํ•ด ๋ฐ›์„ ๋•Œ
public ArrayList(int initialCapacity) {
        if (initialCapacity > 0) {
            this.elementData = new Object[initialCapacity];
        } else if (initialCapacity == 0) {
            this.elementData = EMPTY_ELEMENTDATA;
        } else {
            throw new IllegalArgumentException("Illegal Capacity: "+
                                               initialCapacity);
        }
    }

ํ•ด๋‹น ๋ฐฐ์—ด์€ Object[]๋กœ ์ƒ์„ฑ๋˜๋ฉฐ, ๋ฐฐ์—ด์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ํ•œ๋ฒˆ ๊ธธ์ด๊ฐ€ ์ •ํ•ด์ง€๋ฉด ๋Š˜๋ฆฌ๊ฑฐ๋‚˜ ์ค„์ผ ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ํ•ด๋‹น ๋ฐฐ์—ด์ด ๋‹ค ์ฐจ๋ฉด, ํ˜„์žฌ ๋ฐฐ์—ด์˜ ๊ธธ์ด 2๋ฐฐ์ธ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์„ ๋งŒ๋“ค๊ณ  ๊ธฐ์กด์˜ ๋ฐฐ์—ด์— ๋‹ด๊ธด ๋ฐ์ดํ„ฐ๋ฅผ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์— ๋‹ด์•„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

๋•Œ๋ฌธ์— ๋ฆฌ์ŠคํŠธ์— ๋‹ด๊ธธ ๋ฐ์ดํ„ฐ์˜ ๊ฐœ์ˆ˜๋ฅผ ์•Œ๊ณ  ์žˆ๋‹ค๋ฉด ArrayList ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ํ•ด๋‹น ๊ฐœ์ˆ˜๋งŒํผ์˜ ๋ฐฐ์—ด์„ ๋ฉ”๋ชจ๋ฆฌ์— ํ• ๋‹นํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.

ํ•˜์ง€๋งŒ ๋‹ด๊ธธ ๋ฐ์ดํ„ฐ์˜ ๊ฐœ์ˆ˜๋ฅผ ์•Œ์ง€ ๋ชปํ•˜๊ณ , ๋Œ€๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€์ ์œผ๋กœ ๋ฐ˜๋ณตํ•ด์„œ ArrayList ๊ฐ์ฒด์— ๋‹ด๋Š”๋‹ค๋ฉด ๊ธฐ์กด์˜ ๋ฐฐ์—ด์ด ๋‹ค ์ฐจ๊ณ  ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์„ ๋งŒ๋“ค์–ด ๊ธฐ์กด ๋ฐฐ์—ด์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์— ๋‹ด๋Š” ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•˜๋Š” ๋งŒํผ ์ˆ˜ํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ถˆํ•„์š”ํ•œ ๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

๋˜ํ•œ, ArrayList ํด๋ž˜์Šค๋Š” ์—ฐ์†์ ์ธ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„๊ณผ ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ O(1)์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋กœ ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผ ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๋ฐฐ์—ด์˜ ํŠน์ง•์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”๋ฐ, ์กฐํšŒ๋ฅผ ์ฃผ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ํšจ์œจ์ ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ด€๋ฆฌ ํ•  ์ˆ˜ ์žˆ๋‹ค.

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

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


LinkedList

LinkedList ํด๋ž˜์Šค๋Š” ArrayList ํด๋ž˜์Šค์™€ ๋‹ฌ๋ฆฌ AbstractList ์ถ”์ƒ ํด๋ž˜์Šค๋ฅผ ์ง์ ‘์ ์œผ๋กœ ์ƒ์† ๋ฐ›๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ AbstractSequesntialList ์ถ”์ƒ ํด๋ž˜์Šค๋ฅผ ์ƒ์† ๋ฐ›์•„ ํ™•์žฅํ•œ๋‹ค.
๋˜ํ•œ, RandomAccess ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์„ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด๋Š” LinkedList์˜ ๊ตฌ์กฐ์™€ ๋ฐ€์ ‘ํ•œ ๊ด€๊ณ„๋ฅผ ๊ฐ€์ง€๋Š”๋ฐ, LinkedList๋Š” ArrayList ์ฒ˜๋Ÿผ ๋ฐฐ์—ด์˜ ๊ตฌ์กฐ๋ฅผ ์ด์šฉํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ Node๋ผ๋Š” ๊ฐ์ฒด์˜ ์—ฐ๊ฒฐ์„ ํ†ตํ•ด ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค.
(Node ๊ฐ์ฒด๋Š” LinkedList์˜ ๋‚ด๋ถ€ ํด๋ž˜์Šค๋กœ ๋ช…์‹œ๋˜์–ด ์‚ฌ์šฉ๋œ๋‹ค.)

๋•Œ๋ฌธ์— LinkedList๋Š” Sequential Access(์ˆœ์ฐจ ์ ‘๊ทผ)์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•˜๊ธฐ์— RandomAccess ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ ํ•  ํ•„์š”๊ฐ€ ์—†์œผ๋ฉฐ, ์ด๋กœ ์ธํ•ด AbstractList ์ถ”์ƒ ํด๋ž˜์Šค๋ฅผ ํ™•์žฅํ•œ AbstractSequentialList ์ถ”์ƒ ํด๋ž˜์Šค๋ฅผ ์ƒ์† ๋ฐ›์•„ ์ˆœ์ฐจ ์ ‘๊ทผ์— ํ•„์š”ํ•œ ๊ณตํ†ต์ ์ธ ๋ฉ”์†Œ๋“œ๋ฅผ ์ œ๊ณต ๋ฐ›๋Š”๋‹ค.

public E get(int index) {
	// ์ธ๋ฑ์Šค๊ฐ€ List ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜๋Š”์ง€ ํ™•์ธ
	checkElementIndex(index);
	// node(index)๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ ์กฐํšŒ
	return node(index).item;
}

Node<E> node(int index) {
	// assert isElementIndex(index);

	if (index < (size >> 1)) {
		Node<E> x = first;
		for (int i = 0; i < index; i++)
			x = x.next;
		return x;
	} else {
		Node<E> x = last;
		for (int i = size - 1; i > index; i--)
			x = x.prev;
		return x;
	}
}

Node ๊ฐ์ฒด๋Š” item, next, prev๋ฅผ ๋ฉค๋ฒ„ ํ•„๋“œ๋กœ ๊ฐ€์ง„๋‹ค.

์œ„์˜ ์ฝ”๋“œ์˜ node() ๋ฉ”์†Œ๋“œ๋ฅผ ํ™•์ธํ•˜๋ฉด ๋งค๊ฐœ ๋ณ€์ˆ˜๋กœ ๋ฐ›๋Š” index์˜ ๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ ์ฒซ ๋ฒˆ์งธ ๋…ธ๋“œ์™€ ๋งˆ์ง€๋ง‰ ๋…ธ๋“œ ์ค‘ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๋ฐฉํ–ฅ์—์„œ ํ•˜๋‚˜์”ฉ ๋‹ค์Œ ํ˜น์€ ์ด์ „ ๋…ธ๋“œ๋ฅผ ๋ฐฉ๋ฌธํ•ด์„œ ์กฐํšŒํ•˜๊ณ ์ž ํ•˜๋Š” ๋…ธ๋“œ์— ๋„์ฐฉํ–ˆ์„ ๋•Œ ํ•ด๋‹น ๋…ธ๋“œ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

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

LinkedList๋Š” ์ถ”๊ฐ€, ์ˆ˜์ •, ์‚ญ์ œ์— ArrayList ๋ณด๋‹ค ์ข‹์€ ํšจ์œจ์„ ๋ณด์—ฌ์ค€๋ฐ, ArrayList๋Š” ๊ธธ์ด๊ฐ€ ์ •ํ•ด์ ธ ์žˆ์–ด ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€,์ˆ˜์ •, ์‚ญ์ œํ•˜๋Š” ํ–‰์œ„๋ฅผ ์ˆ˜ํ•ดํ•  ๋•Œ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์„ ์ƒ์„ฑํ•˜๋ฉด์„œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋‚ญ๋น„ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํšจ์œจ์ด ๋–จ์–ด์ง„๋‹ค.
ํ•˜์ง€๋งŒ LinkedList๋Š” ๋ณ€๊ฒฝํ•˜๊ณ ์ž ํ•˜๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์œ„์น˜ํ•œ ๋…ธ๋“œ๋ฅผ ๊ต์ฒดํ•ด์ฃผ๊ธฐ๋งŒ ํ•˜๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ถ”๊ฐ€์ ์œผ๋กœ ์ „์ฒด ๋ฐ์ดํ„ฐ๋ฅผ ๋ณต์‚ฌํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ๋ฐœ์ƒํ•˜์ง€ ์•Š์•„ ํ›จ์”ฌ ํšจ์œจ์ ์ด๋‹ค.

์ด๋Ÿฐ ์ด์ ์ด ์žˆ๋Š” LinkedList์ด์ง€๋งŒ ํ•ด๋‹น ํ–‰์œ„๋ฅผ ์ˆ˜ํ–‰ํ•  ๋•Œ O(n)์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ฐ€์ง€๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š”๋ฐ, ์ด๋Š” ์ฒซ ๋ฒˆ์งธ ํ˜น์€ ๋งˆ์ง€๋ง‰ ๋…ธ๋“œ๋ฅผ ์ œ์™ธํ•œ ์ค‘๊ฐ„ ๋…ธ๋“œ์— ๋Œ€ํ•œ ํ•ด๋‹น ํ–‰์œ„๋ฅผ ์ˆ˜ํ–‰ ํ•  ๋•Œ ๋ฐœ์ƒํ•œ๋‹ค.

๊ทธ ์ด์œ ๋Š”, ์–ด์จŒ๋“  ๋ณ€๊ฒฝํ•˜๊ณ ์ž ํ•˜๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์œ„์น˜ํ•œ ๋…ธ๋“œ๊นŒ์ง€ ๋„๋‹ฌํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
๋‹ค๋งŒ ์ฒซ ๋ฒˆ์งธ์™€ ๋งˆ์ง€๋ง‰ ๋…ธ๋“œ๋Š” ์ฒ˜์Œ๊ณผ ๋์— ์œ„์น˜ํ•œ ๋…ธ๋“œ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ถ”๊ฐ€์ ์œผ๋กœ ๋‹ค๋ฅธ ๋…ธ๋“œ๋ฅผ ์ฐพ์ง€ ์•Š์•„๋„ ๋˜๊ธฐ ๋•Œ๋ฌธ์— O(1)์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ฐ€์ง„๋‹ค.

Vector

Vector ํด๋ž˜์Šค๋Š” ArrayList ํด๋ž˜์Šค์™€ ๋™์ผํ•œ ๋‚ด๋ถ€ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์ง€๋งŒ, ๋‘˜์˜ ๊ฐ€์žฅ ํฐ ์ฐจ์ด๋Š” ๋™๊ธฐํ™”์˜ ์—ฌ๋ถ€์ด๋‹ค.
ArrayList ํด๋ž˜์Šค๋Š” ๋™๊ธฐํ™”๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š์ง€๋งŒ Vector ํด๋ž˜์Šค๋Š” ๋™๊ธฐํ™”๋ฅผ ์ง€์›ํ•œ๋‹ค.

๋•Œ๋ฌธ์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์Šค๋ ˆ๋“œ๊ฐ€ ๋™์‹œ์— Vector ๊ฐ์ฒด์— ์ ‘๊ทผ ํ•  ์ˆ˜ ์—†์œผ๋ฉฐ, ์ด์ „ ์Šค๋ ˆ๋“œ์—์„œ Vector ๊ฐ์ฒด์— ๋Œ€ํ•œ ์ž‘์—… ์ˆ˜ํ–‰์„ ์™„๋ฃŒํ•ด์•ผ์ง€ ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ์—์„œ Vector ๊ฐ์ฒด์— ์ ‘๊ทผ ํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ ์•ˆ์ „ํ•˜๊ฒŒ ๊ฐ์ฒด ๋‚ด์— ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝ ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋‹ค๋งŒ, ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ๋ฅผ ์ง€์›ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ArrayList ๋ณด๋‹ค ์„ฑ๋Šฅ์ด ๋–จ์–ด์ง„๋‹ค๋Š” ๋‹จ์ ์ด ์กด์žฌํ•œ๋‹ค.

Stack

Stack ํด๋ž˜์Šค๋Š” LIFO(์„ ์ž…ํ›„์ถœ)์˜ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์ด๋ฉฐ, Vector ํด๋ž˜์Šค๋ฅผ ์ƒ์† ๋ฐ›์•„ ํ™•์žฅํ•œ๋‹ค. Vector ํด๋ž˜์Šค๋ฅผ ๊ทธ๋Œ€๋กœ ํ™•์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— Vector ํด๋ž˜์Šค์˜ ๋ฌธ์ œ์ ์„ ๊ทธ๋Œ€๋กœ ์ด์–ด ๋ฐ›๋Š”๋‹ค.

๋˜ํ•œ, ์ž๋ฃŒ๊ตฌ์กฐ ์ƒ Stack ํด๋ž˜์Šค์™€ Vectorํด๋ž˜์Šค์˜ ์ƒ์† ๊ด€๊ณ„๋Š” ์˜ณ์ง€ ์•Š์œผ๋‚˜ ์•„์ง๊นŒ์ง€ ์‚ฌ์šฉํ•˜๋Š” ์œ ์ €๊ฐ€ ์กด์žฌํ•ด ๋ณ„ ๋‹ค๋ฅธ ๋ณ€๊ฒฝ์ด๋‚˜ ์‚ฌ์šฉ์„ ๊ธˆ์ง€ํ•˜์ง€ ์•Š๊ณ  ์žˆ๋‹ค.

Vector์™€ Stack์€ ์™œ ์‚ฌ์šฉํ•˜์ง€ ์•Š์„๊นŒ?

์•ž์„œ ์•Œ์•„๋ดค๋˜ ๋‚ด์šฉ์ฒ˜๋Ÿผ Vector ํด๋ž˜์Šค๋Š” ๋™๊ธฐํ™”๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š”๋ฐ, ๋‚ด๋ถ€์— ๊ตฌํ˜„๋œ ๋Œ€๋ถ€๋ถ„ ๋ฉ”์†Œ๋“œ์— synchronized ์ œ์–ด์ž๊ฐ€ ์„ ์–ธ๋˜์–ด ์žˆ๋‹ค.

์ด ๋•Œ๋ฌธ์— Vector ๊ฐ์ฒด์— ํ•œ๋ฒˆ๋งŒ Locking์„ ์ˆ˜ํ–‰ํ•˜๋ฉด ๋˜๋Š” ๊ฒƒ์„ ํ•ด๋‹น ๊ฐ์ฒด์˜ synchronized ๊ฐ€ ์„ ์–ธ๋œ ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœ ํ•  ๋•Œ ๋งˆ๋‹ค Locking์ด ์ˆ˜ํ–‰๋˜์„œ ๋ถˆํ•„์š”ํ•œ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

๋•Œ๋ฌธ์— ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ๋„ ํŠน์ • ์กฐ๊ฑด์ด ์•„๋‹ˆ๋ผ๋ฉด ์„ฑ๋Šฅ ์ €ํ•˜๋ฅผ ์ผ์œผํ‚ค๊ธฐ ๋•Œ๋ฌธ์— ์™ ๋งŒํ•˜๋ฉด ArrayList๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์œผ๋ฉฐ, ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ ArrayList๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ์ฒด ๋™๊ธฐํ™”๋ฅผ ์ง„ํ–‰ํ•˜๊ณ ์ž ํ•œ๋‹ค๋ฉด, Collections.synchronizedList()๋ฅผ ์ƒ์„ฑ์ž์˜ ๋งค๊ฐœ ๋ณ€์ˆ˜๋กœ ์ „๋‹ฌํ•˜์—ฌ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค๋ฉด ๋œ๋‹ค.

Stack ํด๋ž˜์Šค ๋˜ํ•œ Vector ํด๋ž˜์Šค๋ฅผ ํ™•์žฅํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์œ„์™€ ๊ฐ™์€ ๋ฌธ์ œ์ ์„ ๊ทธ๋Œ€๋กœ ์ด์–ด ๋ฐ›๋Š”๋‹ค. ์ด๋ฅผ ๋Œ€์ฒดํ•˜๊ธฐ ์œ„ํ•ด์„œ Deque ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.


๐Ÿ’ญ ์ด๋ฒˆ ์‹œ๊ฐ„์„ ํ†ตํ•ด ๋Œ€๋žต์ ์œผ๋กœ ์•Œ๊ณ  ์žˆ์—ˆ๋˜ ArrayList, LinkedList ํด๋ž˜์Šค์— ๋Œ€ํ•ด์„œ ์•Œ๊ฒŒ ๋˜์—ˆ๊ณ , ์ถ”๊ฐ€์ ์œผ๋กœ Vector์™€ Stack์ด ์™œ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š”์ง€, List์™€ Array์˜ ์ฐจ์ด์— ๋Œ€ํ•ด ๊ณต๋ถ€ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค.

์‹ค๋ฌด์—์„œ ํ•ด๋‹น ๋ถ€๋ถ„๋“ค์„ ์ถฉ๋ถ„ํžˆ ๊ณ ๋ คํ•ด์„œ ๊ฐœ๋ฐœ์„ ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์†์ ์œผ๋กœ ์ƒ๊ธฐ์‹œ์ผœ์•ผ๊ฒ ๋‹ค!

์ฐธ๊ณ  ์‚ฌ์ดํŠธ

 

์ž๋ฐ”์—์„œ Vector์™€ Stack ์ปฌ๋ ‰์…˜์ด ์“ฐ์ด์ง€ ์•Š๋Š” ์ด์œ ?

์ž๋ฐ” ์ปฌ๋ ‰์…˜ ํ”„๋ ˆ์ž„์›Œํฌ Vector์™€ Stack์€ ์™œ ์•ˆ์“ฐ๋Š”๊ฐ€? C++ STL ์ค‘ Vector๋Š” Stack๊ณผ ๋‹ค๋ฅด๊ฒŒ random access๊ฐ€ ๊ฐ€๋Šฅํ•˜๊ณ , iterator ๋“ฑ ๊ตฌ์„ฑ ์›์†Œ์— ์ ‘๊ทผ์ด ์šฉ์ดํ•œ ์—ฌ๋Ÿฌ ๊ธฐ๋Šฅ์„ ๊ฐ€์ง€๊ณ  ์žˆ์–ด ๋„๋ฆฌ ์“ฐ์ธ๋‹ค. Vector..

aahc.tistory.com

 

 

๋žœ๋ค ์•ก์„ธ์Šค ๋ฉ”๋ชจ๋ฆฌ - ์œ„ํ‚ค๋ฐฑ๊ณผ, ์šฐ๋ฆฌ ๋ชจ๋‘์˜ ๋ฐฑ๊ณผ์‚ฌ์ „

์œ„ํ‚ค๋ฐฑ๊ณผ, ์šฐ๋ฆฌ ๋ชจ๋‘์˜ ๋ฐฑ๊ณผ์‚ฌ์ „. ๋žจ์€ ์—ฌ๊ธฐ๋กœ ์—ฐ๊ฒฐ๋ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋œป์— ๋Œ€ํ•ด์„œ๋Š” ๋žจ (๋™์Œ์ด์˜) ๋ฌธ์„œ๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค. RAM์˜ ์ข…๋ฅ˜. ์œ„์—์„œ๋ถ€ํ„ฐ DIP, SIPP, SIMM 30ํ•€, SIMM 72ํ•€, DIMM (SDRAM), DIMM(DDR-SDRAM) ์ปด

ko.wikipedia.org

 

'Programming > Java' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

F016 - File, I/O, Stream  (0) 2021.06.14
F015 - Set (์ž‘์„ฑ ์ค‘)  (0) 2021.05.31
F013 - Generic  (0) 2021.05.26
F012 - Annotation  (0) 2021.05.24
F011 - java.lang.ref  (0) 2021.05.19