โ๏ธ ์ง๊ธ๊น์ง ๊ฐ๋ฐ์ ํ๋ฉด์ ๋ค์ํ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ์ง๋ง, ์ด๋ป๊ฒ ์๋ํ๋์ง ๋ชจ๋ฅธ ์ฑ ์ฌ์ฉํ์๋ค.
๊ทธ๋์ ์ฌ๋ฌ ์ํฉ๋ค ์์์ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ ์ ํ ์ฌ์ฉํ๋ ๊ฒ์ด ์๋๋ผ ๋จ๋ค์ด ์ฐ๋๊น ๋ฐ๋ผ ์ฐ๊ณ , ๋ด๊ฐ ์ต์ํ๋๊น ๊ทธ๋ฅ ์ฐ๋ ๊ฒ์ด ๋ฒ๋ฆ์ด ๋๋ค.
์ด๋ฒ ์๊ฐ์ ํตํด ๊ฐ์ฅ ์์ฃผ ์ฌ์ฉํ๋ 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์ ์ฐจ์ด์ ๋ํด ๊ณต๋ถ ํ ์ ์๊ฒ ๋์๋ค.
์ค๋ฌด์์ ํด๋น ๋ถ๋ถ๋ค์ ์ถฉ๋ถํ ๊ณ ๋ คํด์ ๊ฐ๋ฐ์ ํ ์ ์๋๋ก ์ง์์ ์ผ๋ก ์๊ธฐ์์ผ์ผ๊ฒ ๋ค!
์ฐธ๊ณ ์ฌ์ดํธ
'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 |