[JAVA] ๐ ArrayList vs ๋ฐฐ์ด(int[]) ์ฑ๋ฅ ๋น๊ต
ArrayList์ ๋ฐฐ์ด(int[])์ ์ฑ๋ฅ์ ๋น๊ตํด๋ณด์.
ArrayList<Integer>
๋ ์ธ์ ๋ ์ ๋ฆฌํ ๊น?int[] ๋ฐฐ์ด
์ด ๋ ์ ๋ฆฌํ ๊ฒฝ์ฐ- ์ฑ๋ฅ ๋น๊ต ์คํ (Java)
- ๊ฒฐ๋ก : ์ธ์
ArrayList
๋ฅผ ์ฐ๊ณ , ์ธ์ ๋ฐฐ์ด(int[])
์ ์จ์ผ ํ ๊น? - ์ถ๊ฐ : HashMap<Integer, Integer>์์ ์ฑ๋ฅ ๋น๊ต
๐ ArrayList
vs ๋ฐฐ์ด(int[])
์ฑ๋ฅ ๋น๊ต
ย | ArrayList<Integer> | int[] ๋ฐฐ์ด |
---|---|---|
์ ์ฅ ๋ฐฉ์ | ๋ด๋ถ์ ์ผ๋ก ๋์ ๋ฐฐ์ด(Object[] ) ์ฌ์ฉ | ๊ณ ์ ํฌ๊ธฐ์ int[] ๋ฐฐ์ด ์ฌ์ฉ |
๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ | Integer ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ์ฌ ์ค๋ฒํค๋๊ฐ ํผ | int ์์ ํ์
์ฌ์ฉ (๋ฉ๋ชจ๋ฆฌ ํจ์จ์ ) |
์๋ (์ฝ๊ธฐ/์ฐ๊ธฐ) | ์ผ๋ฐ์ ์ผ๋ก int[] ๋ณด๋ค ๋๋ฆผ | ๋น ๋ฆ (๋ฉ๋ชจ๋ฆฌ ์ง์ ์ ๊ทผ) |
ํฌ๊ธฐ ๋ณ๊ฒฝ ๊ฐ๋ฅ ์ฌ๋ถ | ๊ฐ๋ฅ (add() , remove() ๋ฑ ์ ๊ณต) | ๋ถ๊ฐ๋ฅ (๊ณ ์ ํฌ๊ธฐ) |
์ฌ์ฉ ํธ์์ฑ | ์ ๋์ ์ธ ํฌ๊ธฐ ์กฐ์ ์ด ๊ฐ๋ฅ | ํฌ๊ธฐ ๋ณ๊ฒฝ์ด ๋ถ๊ฐ๋ฅํ์ฌ ์ ์ฐ์ฑ์ด ๋จ์ด์ง |
๐ ArrayList<Integer>
๋ ์ธ์ ๋ ์ ๋ฆฌํ ๊น?
- ํฌ๊ธฐ๊ฐ ๊ฐ๋ณ์ ์ธ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃฐ ๋ (
add()
๋ก ์ฝ๊ฒ ์ถ๊ฐ ๊ฐ๋ฅ) - ์ญ์ , ์ฝ์
์ด ์์ฃผ ๋ฐ์ํ ๋ (
remove()
๋ฉ์๋ ํ์ฉ ๊ฐ๋ฅ) - ์ ๋ค๋ฆญ(
List<T>
)์ ํ์ฉํด์ผ ํ ๋
๐ ์์ : ArrayList
์ฌ์ฉ ์
ArrayList<Integer> list = new ArrayList<>();
list.add(10); // ๊ฐ ์ถ๊ฐ
list.add(20);
list.remove(0); // ์ฒซ ๋ฒ์งธ ์์ ์ญ์
- ํฌ๊ธฐ๊ฐ ์ ๋์ ์ผ๋ก ๋ณํ ์ ์์ (
add()
,remove()
์ฌ์ฉ ๊ฐ๋ฅ) - ๊ทธ๋ฌ๋ ๋ด๋ถ์ ์ผ๋ก
Integer
๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๋ฏ๋ก ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ํผ (int
๋ณด๋ค ๋ง์ ๋ฉ๋ชจ๋ฆฌ ์ฐจ์ง)
๐ int[] ๋ฐฐ์ด
์ด ๋ ์ ๋ฆฌํ ๊ฒฝ์ฐ
- ๊ณ ์ ๋ ํฌ๊ธฐ์ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃฐ ๋ (๋ฉ๋ชจ๋ฆฌ ์ ์ฝ ๊ฐ๋ฅ)
- ๋น ๋ฅธ ์ ๊ทผ ์๋๊ฐ ํ์ํ ๋
- ๋ฉ๋ชจ๋ฆฌ์ ์ง์ ์ ๊ทผ (O(1)) ๊ฐ๋ฅ
- ์ฑ๋ฅ ์ต์ ํ๊ฐ ํ์ํ ๊ฒฝ์ฐ (ํนํ ๋๋ ๋ฐ์ดํฐ)
๐ ์์ : int[]
์ฌ์ฉ ์
int[] arr = new int[3];
arr[0] = 10;
arr[1] = 20;
arr[2] = 30;
- ๋ฉ๋ชจ๋ฆฌ๋ฅผ
int
ํ์ ํฌ๊ธฐ๋งํผ๋ง ์ฌ์ฉ(๋ถํ์ํInteger
๊ฐ์ฒด ์์ฑ ์์) - ์ฝ๊ธฐ/์ฐ๊ธฐ ์๋๊ฐ ๋น ๋ฆ
โณ ์ฑ๋ฅ ๋น๊ต ์คํ (Java)
๋ด๊ฐ ์ง์ ArrayList<Integer>
์ int[]
์ ์๋๋ฅผ ๋น๊ตํ๋ ์ฝ๋๋ฅผ ์คํํด๋ณผ๊ฒ!
์๋ ์ฝ๋๋ก ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ์กฐํํ๋๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ๋น๊ตํด๋ณด์.
import java.util.ArrayList;
public class PerformanceTest {
public static void main(String[] args) {
int SIZE = 10_000_000; // 1์ฒ๋ง ๊ฐ์ ๋ฐ์ดํฐ ํ
์คํธ
// 1๏ธโฃ ๋ฐฐ์ด ํ
์คํธ
long startTime = System.nanoTime();
int[] array = new int[SIZE];
for (int i = 0; i < SIZE; i++) {
array[i] = i;
}
long endTime = System.nanoTime();
System.out.println("๋ฐฐ์ด(int[]) ์คํ ์๊ฐ: " + (endTime - startTime) / 1_000_000 + " ms");
// 2๏ธโฃ ArrayList ํ
์คํธ
startTime = System.nanoTime();
ArrayList<Integer> list = new ArrayList<>(SIZE);
for (int i = 0; i < SIZE; i++) {
list.add(i);
}
endTime = System.nanoTime();
System.out.println("ArrayList ์คํ ์๊ฐ: " + (endTime - startTime) / 1_000_000 + " ms");
}
}
โณ ์ฑ๋ฅ ํ ์คํธ ๊ฒฐ๊ณผ (๋๋ต์ ์ธ ์ฐจ์ด)
ํ
์คํธ ํ๊ฒฝ: 10,000,000
๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๊ฒฝ์ฐ
(๊ฒฐ๊ณผ๋ ์คํ ํ๊ฒฝ์ ๋ฐ๋ผ ๋ค๋ฅผ ์ ์์)
๋ฐ์ดํฐ ํฌ๊ธฐ | int[] ๋ฐฐ์ด (๋ฐฐ์ด) | ArrayList<Integer> (๋ฆฌ์คํธ) |
---|---|---|
10,000,000๊ฐ ๋ฐ์ดํฐ ์ ์ฅ | 30~50ms | 100~200ms |
โ ๋ฐฐ์ด(
int[]
)์ดArrayList<Integer>
๋ณด๋ค ์ฝ 3~5๋ฐฐ ๋น ๋ฆ!
๐ ๊ฒฐ๋ก : ์ธ์ ArrayList
๋ฅผ ์ฐ๊ณ , ์ธ์ ๋ฐฐ์ด(int[])
์ ์จ์ผ ํ ๊น?
์ํฉ | ArrayList<Integer> | int[] ๋ฐฐ์ด |
---|---|---|
๋ฐ์ดํฐ ํฌ๊ธฐ๊ฐ ๊ฐ๋ณ์ ์ผ ๋ | โ ์ถ์ฒ (์๋ ํฌ๊ธฐ ์ฆ๊ฐ) | โ ๋นํจ์จ์ (๊ณ ์ ํฌ๊ธฐ) |
๋น ๋ฅธ ์ฝ๊ธฐ/์ฐ๊ธฐ ์ฑ๋ฅ์ด ํ์ํ ๋ | โ ์๋์ ์ผ๋ก ๋๋ฆผ | โ ๋น ๋ฆ (๋ฉ๋ชจ๋ฆฌ ์ง์ ์ ๊ทผ) |
๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ ์ต์ ํ๊ฐ ํ์ํ ๋ | โ Integer ๊ฐ์ฒด๋ก ์ธํด ๋ฉ๋ชจ๋ฆฌ ๋ญ๋น | โ
int ์์ ํ์
์ด๋ฏ๋ก ๋ฉ๋ชจ๋ฆฌ ์ ์ฝ |
์ญ์ /์ฝ์ ์ด ์์ฃผ ๋ฐ์ํ ๋ | โ
remove() ์ง์ | โ ๋ฐฐ์ด ํฌ๊ธฐ ๊ณ ์ ์ด๋ผ ๋นํจ์จ์ |
- ์ฑ๋ฅ์ด ์ค์ํ๋ค๋ฉด
int[]
๋ฐฐ์ด์ด ํจ์ฌ ๋น ๋ฅด๊ณ ๋ฉ๋ชจ๋ฆฌ๋ ์ ์ฝ๋๋ค! ๐ - ํฌ๊ธฐ๊ฐ ๋ณํ๋ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃฐ ๋๋
ArrayList<Integer>
๊ฐ ํธ๋ฆฌํ๋ค. โ - ๋ฐ์ดํฐ ๊ฐ์๊ฐ ๋ง๊ณ , ์ฝ๊ธฐ/์ฐ๊ธฐ ์ฑ๋ฅ์ด ์ค์ํ๋ค๋ฉด
int[]
์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค. โก - ์ผ๋ฐ์ ์ธ ์ํฉ์์๋
ArrayList<Integer>
๋ฅผ ์ฐ๋ ๊ฒ ๊ฐ๋ฐ ํธ์์ฑ ๋ฉด์์ ์ข๋ค.
์ฆ, ๊ณ ์ ๋ ํฌ๊ธฐ๋ผ๋ฉด ๋ฐฐ์ด์ ์ฐ๊ณ , ํฌ๊ธฐ๊ฐ ์ ๋์ ์ด๋ฉด ArrayList
๋ฅผ ์ฐ๋ ๊ฒ ์ ๋ต! ๐
์ถ๊ฐ : HashMap<Integer, Integer>์์ ์ฑ๋ฅ ๋น๊ต
๋ฐ์ดํฐ ๊ตฌ์กฐ | ์คํ ์๋ (์ด) | ํน์ง |
---|---|---|
๋ฐฐ์ด (int[] ) | ๊ฐ์ฅ ๋น ๋ฆ (0.03~0.05์ด) | ๋ฉ๋ชจ๋ฆฌ ์ง์ ์ ๊ทผ (๊ณ ์ ํฌ๊ธฐ) |
ArrayList (ArrayList<Integer> ) | ์ค๊ฐ (0.1~0.2์ด) | ๋์ ํฌ๊ธฐ ์กฐ์ ๊ฐ๋ฅ |
HashMap (HashMap<Integer, Integer> ) | ๊ฐ์ฅ ๋๋ฆผ (0.3~0.5์ด) | ํค-๊ฐ ๋งคํ (๋น ๋ฅธ ํ์) |
3๏ธโฃ HashMap (HashMap<Integer, Integer>
)
- ์๋: ๊ฐ์ฅ ๋๋ฆผ (๋ฐฐ์ด๋ณด๋ค ์ฝ 5~10๋ฐฐ ๋๋ฆผ)
- ์ด์ :
- ๋ด๋ถ์ ์ผ๋ก ํด์ ํจ์(Hashing) ์ฌ์ฉ โ ๋น ๋ฅธ ํ์(O(1)) ๊ฐ๋ฅ
- ํ์ง๋ง ํค-๊ฐ ์ ์ฅ ๋ฐฉ์์ด๋ผ ๋ฉ๋ชจ๋ฆฌ ์ค๋ฒํค๋๊ฐ ํผ
- ์ฅ์ :
- ๋ฐ์ดํฐ ๊ฒ์์ด O(1) (๊ฑฐ์ ์ฆ๊ฐ์ )
- ํค ๊ธฐ๋ฐ์ผ๋ก ๋น ๋ฅด๊ฒ ๊ฐ์ ์ ๊ทผ ๊ฐ๋ฅ
- ์ธ์ ์ฌ์ฉํ๋ฉด ์ข์๊น?
- Key-Value ํํ์ ๋ฐ์ดํฐ ์ ์ฅ์ด ํ์ํ ๋
- ๋ฐ์ดํฐ ์กฐํ ์๋๊ฐ ์ค์ํ ๊ฒฝ์ฐ (ํ์์ด ๋ง์ ๋)
๐ก ๊ฒฐ๋ก
์ฌ์ฉ ๋ชฉ์ | ์ถ์ฒ ์๋ฃ ๊ตฌ์กฐ |
---|---|
๊ณ ์ ๋ ํฌ๊ธฐ์ ๋ฐ์ดํฐ | int[] (๋ฐฐ์ด) |
ํฌ๊ธฐ๊ฐ ์ ๋์ ์ธ ๋ฆฌ์คํธ | ArrayList<Integer> |
๋น ๋ฅธ ํ์์ด ํ์ํ ๊ฒฝ์ฐ | HashMap<Integer, Integer> |
์ฆ,
โ ๋น ๋ฅธ ์ฐ์ฐ์ด ํ์ํ๋ฉด int[] ๋ฐฐ์ด
โ ๋์ ํฌ๊ธฐ๊ฐ ํ์ํ๋ฉด ArrayList<Integer>
โ ํค-๊ฐ ์กฐํ๊ฐ ๋ง๋ค๋ฉด HashMap<Integer, Integer>