์๋ก
List๋ ๋ชจ๋ ์ธ์ด์์ ๊ฐ์ฅ ์ ์ฉํ ์๋ฃ๊ตฌ์กฐ ์ค ํ๋์ ๋๋ค. Java์์๋ List๋ฅผ ์ธํฐํ์ด์ค๋ก ์ ๊ณตํ๋ฉฐ, LinkedList์ ArrayList๋ฅผ ๊ตฌํํ์ฌ ์ฌ์ฉํ ์ ์์ต๋๋ค.
ArrayList์ LinkedList์ ๊ณตํต๋ ๋ถ๋ถ์ ๋ฝ์์ Colletion ์ธํฐํ์ด์ค๋ฅผ ์ถ๊ฐ๋ก ์ ์ํ์๋๋ฐ, ์ธํฐํ์ด์ค๋ง ๊ฐ์ ๋ฟ ๋ด๋ถ์ ์ผ๋ก ๋์ํ๋ ๋ฐฉ์์ ๋ค๋ฆ ๋๋ค. ์ด๋ฒ ๊ฒ์๊ธ์์๋ ArrayList์ LinkedList์ ์ฐจ์ด๋ฅผ ์์๋ณด๊ณ ์ด๋ ํ ์ํฉ์์ ์ฌ์ฉํด์ผ ํ ์ง ์์๋ณด๊ฒ ์ต๋๋ค.
ArrayList
ArrayList๋ List ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ์ ์ ์ฅ์์๊ฐ ์ ์ง๋๊ณ ์ค๋ณต์ ํ์ฉํ๋ค๋ ํน์ง์ ๊ฐ๊ณ ์์ต๋๋ค.
ArrayList๋ ๊ธฐ์กด์ Java Vector๋ฅผ ๊ฐ์ ํ ๊ฒ์ผ๋ก Vector์ ๊ตฌํ ์ธก๋ฉด์์ ๋์ผํ๋ค๊ณ ํ ์ ์์ต๋๋ค. ํ์ง๋ง ํ์ฌ๋ก ์์ Vector๋ ๊ธฐ์กด์ ์์ฑ๋ ์์ค์์ ํธํ์ฑ์ ์ํด์ ๊ณ์ ๋จ๊ฒจ ๋๊ณ ์์ ๋ฟ์ด๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฅํ๋ฉด Vector๋ณด๋ค๋ ArrayList๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
ArrayList๋ Object ๋ฐฐ์ด์ ์ด์ฉํด์ ๋ฐ์ดํฐ๋ฅผ ์์ฐจ์ ์ผ๋ก ์ ์ฅํฉ๋๋ค. ๋ง์ฝ ๋ฐฐ์ด์ ๊ณต๊ฐ์ด ๊ฝ ์ฐจ ๋ ์ด์ ์ ์ฅํ ๊ณต๊ฐ์ด ์์ผ๋ฉด ๊ธฐ์กด์ ๋ฐฐ์ด๋ณด๋ค ์๋์ ์ผ๋ก 2๋ฐฐ ๋ ํฐ ์๋ก์ด ๋ฐฐ์ด์ ์์ฑํด์ ๊ธฐ์กด์ ๋ฐฐ์ด์ ์ ์ฅ๋ ๋ด์ฉ์ ์๋ก์ด ๋ฐฐ์ด๋ก ๋ณต์ฌํ ๋ค์์ ์ ์ฅํฉ๋๋ค.
ArrayList๋ ์ญ์ ์์๋ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ณต์ฌ ์์ ์ด ์ผ์ด๋ฉ๋๋ค.
ํ์ฌ ๋ฐฐ์ด์์ 0~4์ ๊ฐ์ด ์ ์ฅ๋์ด ์๋ ์ํ์์ ์ธ๋ฒ ์งธ ๋ฐ์ดํฐ(2)๋ฅผ ์ญ์ ํ์๋ค๊ณ ๊ฐ์ ํ๋ฉด ๋ณต์ฌ ์์ ์ ํตํด ๋ชจ๋ ํ ์นธ์ฉ ์๋ก ๋ณต์ฌ์ ๋ฎ์ด ์์ฐ๊ธฐ ์์ ์ด ์ผ์ด๋๊ฒ ๋ฉ๋๋ค. ๋ง์ฝ ๋ฐฐ์ด์ ๊ฐ์ฒด๋ฅผ ์ค๊ฐ์ ์ฝ์ ํ๋ ๊ฒ์ด ์๋ ์์ฐจ์ ์ผ๋ก ์ ์ฅํ ๋์ ๊ฐ์ฒด๋ฅผ ๋ง์ง๋ง์ ์ ์ฅ๋ ๊ฒ๋ถํฐ ์ญ์ ํ์ง ์๋ ์ด์์ ๋ณต์ฌ ์์ ์ด ์ผ์ด๋๊ธฐ ๋๋ฌธ์ ๋ค๋ฃจ๋ ๋ฐ์ดํฐ์ ๊ฐ์๊ฐ ๋ง์์๋ก ์์ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฌ๊ฒ ๋ฉ๋๋ค.
๋ฐ๋ผ์ ArrayList์ ๋ด์ฉ์ ์ ๋ฆฌํด ๋ณด์๋ฉด ์๋์ ๊ฐ์ต๋๋ค.
1. ํฌ๊ธฐ๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ค.
- ํฌ๊ธฐ๋ฅผ ๋ณ๊ฒฝํ ์ ์์ผ๋ฏ๋ก ์๋ก์ด ๋ฐฐ์ด์ ์์ฑํด์ ๋ฐ์ดํฐ๋ฅผ ๋ณต์ฌํด์ผ ํ๋ค.
- ์คํ์๋๋ฅผ ํฅ์ํ๊ธฐ ์ํด์๋ ์ถฉ๋ถํ ํฐ ํฌ๊ธฐ์ ๋ฐฐ์ด์ ์์ฑํด์ผ ํ๋ฏ๋ก ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ญ๋น๋ ์๊ฐ ์๋ค.
2. ๋น์์ฐจ์ ์ธ ๋ฐ์ดํฐ์ ์ถ๊ฐ ๋๋ ์ญ์ ์ ์๊ฐ์ด ๋ง์ด ๊ฑธ๋ฆฐ๋ค.
- ์ฐจ๋ก๋๋ก ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ๊ณ ๋ง์ง๋ง์์๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ์ญ์ ํ๋ ๊ฒ์ ๋น ๋ฅด์ง๋ง,
๋ฐฐ์ด์ ์ค๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ๋ ค๋ฉด ๋น์๋ฆฌ๋ฅผ ๋ง๋ค๊ธฐ ์ํด ๋ค๋ฅธ ๋ฐ์ดํฐ๋ค์ ๋ณต์ฌํด์ ์ด๋ํด์ผ ํ๋ค.
LinkedList
๋ฐฐ์ด์ ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ์ฐ์์ ์ผ๋ก ์กด์ฌํ์ง๋ง LinkedList๋ ๋ถ์ฐ์์ ์ผ๋ก ์กด์ฌํ๋ ๋ฐ์ดํฐ๋ฅผ ์๋ก ์ฐ๊ฒฐํ ํํ๋ก ๊ตฌ์ฑ๋์ด ์์ต๋๋ค.
์์ ๊ทธ๋ฆผ์์ ์ ์ ์๋ฏ์ด LinkedList์ ๊ฐ ์์(node)๋ค์ ์์ ๊ณผ ์ฐ๊ฒฐ๋ ๋ค์ ์์์ ๋ํ ์ฐธ์กฐ(์ฃผ์ ๊ฐ)์ ๋ฐ์ดํฐ๋ก ๊ตฌ์ฑ๋์ด ์์ต๋๋ค.
LinkedList์์์ ๋ฐ์ดํฐ ์ญ์ ์ ์ถ๊ฐ๋ ArrayList์ ๋ค๋ฅด๊ฒ ๊ฐ๋จํฉ๋๋ค. ์ญ์ ํ๊ณ ์ ํ๋ ์์์ ์ด์ ์์๊ฐ ์ญ์ ํ๊ณ ์ ํ๋ ์์์ ๋ค์ ์์๋ฅผ ์ฐธ๋ํ๋๋ก ๋ณ๊ฒฝํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค. ๋จ ํ๋์ ์ฐธ์กฐ๋ง ๋ณ๊ฒฝํ๋ฉด ์ญ์ ๊ฐ ์ด๋ฃจ์ด์ง๋ ๊ฒ์ ๋๋ค. ๋ฐฐ์ด์ฒ๋ผ ๋ฐ์ดํฐ๋ฅผ ์ด๋ํ๊ธฐ ์ํด ๋ณต์ฌํ๋ ๊ณผ์ ์ด ์๊ธฐ ๋๋ฌธ์ ์ฒ๋ฆฌ์๋๊ฐ ๋งค์ฐ ๋น ๋ฆ ๋๋ค.
์๋ก์ด ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ ๋๋ ์๋ก์ด ์์๋ฅผ ์์ฑํ ๋ค์ ์ถ๊ฐํ๊ณ ์ ํ๋ ์์น์ ์ด์ ์์์ ์ฐธ์กฐ๋ฅผ ์๋ก์ด ์์์ ๋ํ ์ฐธ์กฐ๋ก ๋ณ๊ฒฝํด์ฃผ๊ณ , ์๋ก์ด ์์๊ฐ ๊ทธ ๋ค์ ์์๋ฅผ ์ฐธ์กฐํ๋๋ก ๋ณ๊ฒฝํ๊ธฐ๋ง ํ๋ฉด ๋๋ฏ๋ก ์ฒ๋ฆฌ์๋๊ฐ ๋งค์ฐ ๋น ๋ฆ ๋๋ค.
Doubly LinkedList(์ด์ค ์ฐ๊ฒฐ๋ฆฌ์คํธ)
LinkedList๋ ์ด๋๋ฐฉํฅ์ด ๋จ๋ฐฉํฅ์ด๊ธฐ ๋๋ฌธ์ ๋ค์ ์์์ ๋ํ ์ ๊ทผ์ ์ฝ์ง๋ง ์ด์ ์์์ ๋ํ ์ ๊ทผ์ ์ด๋ ต๋ค๋ ๋จ์ ์ด ์์ต๋๋ค. ์ด ์ ์ ๋ณด์ํ๊ธฐ ์ํด ๋์จ ๊ฒ์ด Doubly LinkedList(์ด์ค ์ฐ๊ฒฐ ๋ฆฌ์คํธ)์ ๋๋ค.
Doubly LinkedList(์ด์ค ์ฐ๊ฒฐ ๋ฆฌ์คํธ)๋ ๋จ์ํ LinkedList์ ์ฐธ์กฐ๋ณ์๋ฅผ ํ๋ ๋ ์ถ๊ฐํ์ฌ ๋ค์ ์์์ ๋ํ ์ฐธ์กฐ๋ฟ ์๋๋ผ ์ด์ ์์์ ๋ํ ์ฐธ์กฐ๊ฐ ๊ฐ๋ฅํ๋๋ก ํ์ ๋ฟ, ๊ทธ ์ธ์๋ LinkedList์ ๋์ผํฉ๋๋ค.
Doubly LinkedList(์ด์ค ์ฐ๊ฒฐ๋ฆฌ์คํธ)๋ LinkedList๋ณด๋ค ๊ฐ ์์์ ๋ํ ์ ๊ทผ๊ณผ ์ด๋์ด ์ฝ๊ธฐ ๋๋ฌธ์ LinkedList๋ณด๋ค ๋ ๋ง์ด ์ฌ์ฉ๋ฉ๋๋ค.
Doubly Circular LinkedList(์ด์ค ์ํ ๋ฆฌ์คํธ)
Doubly LinkedList(์ด์ค ์ฐ๊ฒฐ ๋ฆฌ์คํธ)์ ์ ๊ทผ์ฑ์ ๋ณด๋ค ํฅ์์ํจ ๊ฒ์ด Doubly Circular LinkedList(์ด์ค ์ํ ๋ฆฌ์คํธ)์ธ๋ฐ ๋จ์ํ Doubly LinkedList(์ด์ค ์ฐ๊ฒฐ๋ฆฌ์คํธ)์ ์ฒซ ๋ฒ์งธ ์์์ ๋ง์ง๋ง ์์๋ฅผ ์๋ก ์ฐ๊ฒฐ์ํจ ๊ฒ์ ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด, ๋ง์ง๋ง ์์์ ๋ค์ ์์๊ฐ ์ฒซ ๋ฒ์งธ ์์๊ฐ ๋๊ณ , ์ฒซ ๋ฒ์งธ ์์์ ์ด์ ์์๊ฐ ๋ง์ง๋ง ์์๊ฐ ๋ฉ๋๋ค.
์ฌ์ค Java์์ LinkedList ํด๋์ค๋ ์ด๋ฆ๊ณผ ๋ฌ๋ฆฌ LinkedList๊ฐ ์๋ Doubly LinkedList(์ด์ค ์ฐ๊ฒฐ ๋ฆฌ์คํธ)๋ก ๊ตฌํ๋์ด ์์ต๋๋ค. ์ด๋ LinkedList์ ๋จ์ ์ธ ๋ฎ์ ์ ๊ทผ์ฑ(accessability)์ ๋์ด๊ธฐ ์ํด์์ ๋๋ค.
ArrayList์ LinkedList์ ์ฑ๋ฅ ์ฐจ์ด
์ค์ ๋ก ์๋ ์ฝ๋๋ฅผ ํตํด ArrayList์ LinkedList์์์ ์ถ๊ฐ์ ์ญ์ ์ฐ์ฐ์ ์ฐจ์ด๋ฅผ ์์๋ณผ ์ ์์ต๋๋ค.
import java.util.*;
public class Test {
public static void main(String args[]) {
// ์ถ๊ฐํ ๋ฐ์ดํฐ์ ๊ฐ์๋ฅผ ๊ณ ๋ คํ์ฌ ์ถฉ๋ถํ ์ก์์ผํ๋ค.
ArrayList al = new ArrayList(2000000);
LinkedList ll = new LinkedList();
System.out.println("= ์์ฐจ์ ์ผ๋ก ์ถ๊ฐํ๊ธฐ =");
System.out.println("ArrayList :" + add1(al));
System.out.println("LinkedList :" + add1(ll));
System.out.println();
System.out.println("= ์ค๊ฐ์ ์ถ๊ฐํ๊ธฐ =");
System.out.println("ArrayList :" + add2(al));
System.out.println("LinkedList :" + add2(ll));
System.out.println();
System.out.println("= ์ค๊ฐ์์ ์ญ์ ํ๊ธฐ =");
System.out.println("ArrayList :" + remove2(al));
System.out.println("LinkedList :" + remove2(ll));
System.out.println();
System.out.println("= ์์ฐจ์ ์ผ๋ก ์ญ์ ํ๊ธฐ =");
System.out.println("ArrayList :" + remove1(al));
System.out.println("LinkedList :" + remove1(ll));
}
public static long add1(List list) {
long start = System.currentTimeMillis();
for (int i = 0; i < 1000000; i++) list.add(i + "");
long end = System.currentTimeMillis();
return end - start;
}
public static long add2(List list) {
long start = System.currentTimeMillis();
for (int i = 0; i < 10000; i++) list.add(500, "X");
long end = System.currentTimeMillis();
return end - start;
}
public static long remove1(List list) {
long start = System.currentTimeMillis();
for (int i = list.size() - 1; i >= 0; i--) list.remove(i);
long end = System.currentTimeMillis();
return end - start;
}
public static long remove2(List list) {
long start = System.currentTimeMillis();
for (int i = 0; i < 10000; i++) list.remove(i);
long end = System.currentTimeMillis();
return end - start;
}
}
์คํํ๊ฒฝ์ ๋ฐ๋ผ ๊ฒฐ๊ณผ๋ ์กฐ๊ธ ๋ค๋ฅด๊ฒ ์ง๋ง ์ ๊ฐ ๋๋ ธ์ ๋์ ๊ฒฐ๊ณผ๋ ์๋์ ๊ฐ์ต๋๋ค.
๊ฒฐ๋ก
- ์์ฐจ์ ์ผ๋ก ์ถ๊ฐ/์ญ์ ํ๋ ๊ฒฝ์ฐ์๋ ArrayList๊ฐ LinkedList๋ณด๋ค ๋น ๋ฅด๋ค.
- ์ค๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐ/์ญ์ ํ๋ ๊ฒฝ์ฐ์๋ LinkedList๊ฐ ArrayList๋ณด๋ค ๋น ๋ฅด๋ค.
'BackEnd๐ฑ > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java] Object to int (0) | 2022.05.06 |
---|---|
[Java] wrapper ํด๋์ค์ ์ ์, ๋ฉ๋ชจ๋ฆฌ, ์บ์ฑ (0) | 2022.04.08 |
[Java] StringBuffer์ StringBuilder (0) | 2022.04.06 |
[Java] String ํด๋์ค (0) | 2022.04.05 |
[Java] ์ธํฐํ์ด์ค(interface) ์ด ์ ๋ฆฌ (0) | 2022.03.30 |
[Java] super์ super()์ ๊ฐ๋ (0) | 2022.03.24 |
๋๊ธ