...

ArrayList ์ปฌ๋ ์
์๋ฐ์ ์ปฌ๋ ์ ํ๋ ์์ํฌ๋ฅผ ์ ํ๋ค๋ฉด ๊ฐ์ฅ ๋จผ์ ๋ฐฐ์ฐ๋ ์ปฌ๋ ์ ์ด ArrayList ์ผ ๊ฒ์ด๋ค.
์๋ฃ๊ตฌ์กฐ(Data Structure) ์ด๋ผ๊ณ ํด์ ๋ฌด์ธ๊ฐ ๋ฐฉ๋ํ๊ฒ ๋๊ปด์ ธ ์ ๊ทผ์ด ์ด๋ ค์ธ ๊ฒ ์ฒ๋ผ ๋๋ผ๊ฒ ์ง๋ง, ArrayList๋ ๋ฐฐ์ด์ ์์ํธํ ๋ฒ์ ์ ๋๋ก ์ดํดํ๋ฉด ๋๋ค. ๊ธฐ์กด์ ๋ฐฐ์ด๋ง์ผ๋ก๋ ์๋ฃ๋ฅผ ๋ด๊ณ ๊ด๋ฆฌํ๋๋ฐ ์ฝ๊ฐ ๋ถํธํจ์ด ์์ด์ ๋์จ ๊ฒ์ด ArrayList ์ด๊ธฐ ๋๋ฌธ์ด๋ค.
ArrayList ํน์ง

- ์ฐ์์ ์ธ ๋ฐ์ดํฐ์ ๋ฆฌ์คํธ (๋ฐ์ดํฐ๋ ์ฐ์์ ์ผ๋ก ๋ฆฌ์คํธ์ ๋ค์ด์์ด์ผ ํ๋ฉฐ ์ค๊ฐ์ ๋น๊ณต๊ฐ์ด ์์ผ๋ฉด ์๋๋ค)
- ArrayList ํด๋์ค๋ ๋ด๋ถ์ ์ผ๋ก
Object[]๋ฐฐ์ด์ ์ด์ฉํ์ฌ ์์๋ฅผ ์ ์ฅ - ๋ฐฐ์ด์ ์ด์ฉํ๊ธฐ ๋๋ฌธ์ ์ธ๋ฑ์ค๋ฅผ ์ด์ฉํด ์์์ ๋น ๋ฅด๊ฒ ์ ๊ทผํ ์ ์๋ค.
- ํฌ๊ธฐ๊ฐ ๊ณ ์ ๋์ด์๋ ๋ฐฐ์ด๊ณผ ๋ฌ๋ฆฌ ๋ฐ์ดํฐ ์ ์ฌ๋์ ๋ฐ๋ผ ๊ฐ๋ณ์ ์ผ๋ก ๊ณต๊ฐ์ ๋๋ฆฌ๊ฑฐ๋ ์ค์ธ๋ค.
- ๊ทธ๋ฌ๋ ๋ฐฐ์ด ๊ณต๊ฐ์ด ๊ฝ ์ฐฐ๋ ๋ง๋ค ๋ฐฐ์ด์ copyํ๋ ๋ฐฉ์์ผ๋ก ๋๋ฆฌ๋ฏ๋ก ์ด ๊ณผ์ ์์ ์ง์ฐ์ด ๋ฐ์ํ๊ฒ ๋๋ค.
- ๋ฐ์ดํฐ๋ฅผ ๋ฆฌ์คํธ ์ค๊ฐ์ ์ฝ์ /์ญ์ ํ ๊ฒฝ์ฐ, ์ค๊ฐ์ ๋น ๊ณต๊ฐ์ด ์๊ธฐ์ง ์๋๋ก ์์๋ค์ ์์น๋ฅผ ์๋ค๋ก ์๋์ผ๋ก ์ด๋์ํค๊ธฐ ๋๋ฌธ์ ์ฝ์ /์ญ์ ๋์์ ๋๋ฆฌ๋ค.
- ๋ฐ๋ผ์ ์กฐํ๋ฅผ ๋ง์ด ํ๋ ๊ฒฝ์ฐ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค
ArrayList vs ๋ฐฐ์ด

๋ฐฐ์ด ์ฅ๋จ์
- ์ฒ์ ์ ์ธํ ๋ฐฐ์ด์ ํฌ๊ธฐ(๊ธธ์ด)๋ ๋ณ๊ฒฝํ ์ ์๋ค. ์ด๋ฅผ ์ ์ ํ ๋น(static allocation)์ด๋ผ๊ณ ํ๋ค.
- ๋ฐ์ดํฐ ํฌ๊ธฐ๊ฐ ์ ํด์ ธ์์ ๊ฒฝ์ฐ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๊ฐ ํธํ๋ค.
- ๋ฉ๋ชจ๋ฆฌ์ ์ฐ์์ ์ผ๋ก ๋์ด๋์ด ํ ๋นํ๊ธฐ ๋๋ฌธ์ index๋ฅผ ํตํ ์์ธ(์ ๊ทผ)์๋๊ฐ ๋น ๋ฅด๋ค.
- index์ ์์นํ ํ๋์ ๋ฐ์ดํฐ(element)๋ฅผ ์ญ์ ํ๋๋ผ๋ ํด๋น index์๋ ๋น๊ณต๊ฐ์ผ๋ก ๊ณ์ ๋จ๋๋ค.
- ๋ฐฐ์ด์ ํฌ๊ธฐ๋ฅผ ๋ณ๊ฒฝํ ์ ์๊ธฐ ๋๋ฌธ์, ์ฒ์์ ๋๋ฌด ํฐ ํฌ๊ธฐ๋ก ์ค์ ํด์ฃผ์์ ๊ฒฝ์ฐ ๋ฉ๋ชจ๋ฆฌ ๋ญ๋น๊ฐ ๋ ์ ์๊ณ , ๋ฐ๋๋ก ๋๋ฌด ์์ ํฌ๊ธฐ๋ก ์ค์ ํด์ฃผ์์ ๊ฒฝ์ฐ ๊ณต๊ฐ์ด ๋ถ์กฑํด์ง๋ ๊ฒฝ์ฐ๊ฐ ๋ฐ์ ํ ์ ์๋ค.
Number[] r = new Number[5]; // ์ ์ ํ ๋น(static allocation)
r[0] = 10;
r[1] = 20;
r[2] = 30;
r[3] = 40;
r[4] = 50;
r[3] = null; // ๋ฐฐ์ด์ ์ญ์ ๋ฉ์๋๊ฐ ์์ด์ null์ ์ด์ฉํด ๊ฐ์ฒด ์์๋ฅผ ์ญ์
System.out.println(Arrays.toString(r)); // [10, 20, 30, null, 50]

ArrayList ์ฅ๋จ์
- ๋ฆฌ์คํธ์ ๊ธธ์ด๊ฐ ๊ฐ๋ณ์ ์ด๋ค. ์ด๋ฅผ ๋์ ํ ๋น(dynamic allocation)์ด๋ผ๊ณ ํ๋ค.
- ๋ฐฐ์ด๊ณผ ๋ฌ๋ฆฌ ๋ฉ๋ชจ๋ฆฌ์ ์ฐ์์ ์ผ๋ก ๋์ด๋์ด์์ง ์๊ณ ์ฃผ์๋ก ์ฐ๊ฒฐ๋์ด์๋ ํํ์ด๊ธฐ ๋๋ฌธ์ index๋ฅผ ํตํ ์์ธ(์ ๊ทผ)์๋๊ฐ ๋ฐฐ์ด๋ณด๋ค๋ ๋๋ฆฌ๋ค.
- ๋ฐ์ดํฐ(element) ์ฌ์ด์ ๋น ๊ณต๊ฐ์ ํ์ฉํ์ง ์๋๋ค.
- ๊ฐ์ฒด๋ก ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๊ธฐ ๋๋ฌธ์ ์ ์์์ ๋ฐ์ดํฐ๋ง ์ธ ๊ฒฝ์ฐ ๋ฐฐ์ด์ ๋นํด ์ฐจ์งํ๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ปค์ง๋ค.
primitive type์ธ int ํ์ ์ผ ๊ฒฝ์ฐ ํฌ๊ธฐ๋ 4Byte ์ด๋ค.
๋ฐ๋ฉด์ Wrapper ํด๋์ค์ธ Integer๋ 32bit JVM ํ๊ฒฝ์์๋, ๊ฐ์ฒด์ ํค๋(8Byte), ์์ ํ๋(4Byte), ํจ๋ฉ(4Byte)์ผ๋ก '์ต์ 16Byte ํฌ๊ธฐ๋ฅผ ์ฐจ์งํ๋ค. ๋ํ ์ด๋ฌํ ๊ฐ์ฒด ๋ฐ์ดํฐ๋ค์ ๋ค์ ์ฃผ์๋ก ์ฐ๊ฒฐํ๊ธฐ ๋๋ฌธ์ 16 + ฮฑ ๊ฐ ๋๋ค.
List<Number> l = new ArrayList<>(); // ๋์ ํ ๋น(dynamic allocation)
l.add(10);
l.add(20);
l.add(30);
l.add(40);
l.add(50);
l.remove(3);
System.out.println(l); // [10, 20, 30, 50]

ArrayList ์ฌ์ฉ๋ฒ
ArrayList ๊ฐ์ฒด ์์ฑ
ArrayList๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์ ์๋จ์ ํจํค์ง๋ฅผ ๋ช ์ํ์ฌ ๊ฐ์ ธ์์ผ ํ๋ค.
import java.util.ArrayList;
๋ฉ์๋ | ์ค ๋ช |
ArrayList() | ํฌ๊ธฐ๊ฐ 10์ธ ArrayList๋ฅผ ์์ฑ |
ArrayList(Collection c) | ์ฃผ์ด์ง ์ปฌ๋ ์ ์ด ์ ์ฅ๋ ArrayList๋ฅผ ์์ฑ |
ArrayList(int initialCapacity) | ์ง์ ๋ ์ด๊ธฐ์ฉ๋์ ๊ฐ๋ ArrayList๋ฅผ ์์ฑ |
// ํ์
์ค์ Integer ๊ฐ์ฒด๋ง ์ ์ฌ๊ฐ๋ฅ
ArrayList<Integer> members = new ArrayList<>();
// ์ด๊ธฐ ์ฉ๋(capacity)์ง์
ArrayList<Integer> num3 = new ArrayList<>(10);
// ๋ฐฐ์ด์ ๋ฃ์ด ์์ฑ
ArrayList<Integer> list2 = new ArrayList<>(Arrays.asList(1,2,3));
// ๋ค๋ฅธ ์ปฌ๋ ์
์ผ๋ก๋ถํฐ ๊ทธ๋๋ก ์์๋ฅผ ๋ฐ์์ ์์ฑ (ArrayList๋ฅผ ์ธ์๋ก ๋ฐ๋ API๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์ Collection ํ์
๋ณํ์ด ํ์ํ ๋ ๋ง์ด ์ฌ์ฉ)
ArrayList<Integer> list3 = new ArrayList<>(list2);
ArrayList ์์ฑ ๋ฌธ๋ฒ์ ๋ณด๋ฉด ๊บพ์ ๊ดํธ <> ๊ธฐํธ๋ฅผ ์ด์ฉํด ํ์
์ ์ง์ ํจ์ ๋ณผ ์ ์๋ค. ์ ๊บพ์ ๊ดํธ๊ฐ ๋ฐ๋ก ์ ๋ค๋ฆญ์ด๋ค.
๋ง์ผ ๊บพ์ ๊ดํธ ์์ String ํ์ ๋ช ์ ๊ธฐ์ฌํ๋ฉด ArrayList ํด๋์ค ์๋ฃํ์ ํ์ ์ String ํ์ ์ผ๋ก ์ง์ ๋์ด ๋ฌธ์์ด ๋ฐ์ดํฐ๋ง ๋ฆฌ์คํธ์ ์ ์ฌํ ์ ์๊ฒ ๋๋ค.
์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ๋ฐฐ์ด๊ณผ ๋ฆฌ์คํธ์ ์ ์ธ๋ฌธ ํํ๋ฅผ ๋น๊ตํด๋ณด๋ฉด ์ดํดํ๊ธฐ ์ฌ์ธ ๊ฒ์ด๋ค. ์ ์ธํ๋ ํค์๋๋ ๋ฌธ๋ฒ ์์๊ฐ ๋ค๋ฅผ๋ฟ, ๊ฒฐ๊ตญ ์๋ฃํ๋ช ์ ์ ์ธํ๊ณ ์๋ฃํ์ ํ์ ์ ์ง์ ํ๋ค๋ ์ ์ ๊ฐ๋ค๊ณ ๋ณผ ์ ์๋ค.

ArrayList ์์ ์ถ๊ฐ
ArrayList์ ์์๋ฅผ ์ถ๊ฐํ ๋ ์ ๋ค๋ฆญ ํ์ ํ๋ผ๋ฏธํฐ๋ก ๋ช ์๋ ํ์ ์ ๋ฐ์ดํฐ๋ง ์ถ๊ฐ๊ฐ ๊ฐ๋ฅํ๋ค.
๊ทธ๋ฆฌ๊ณ ArrayList๋ฅผ ์ฒ์ ์ ํ ๋ ์ฉ๋(capacity)๊ณผ ํฌ๊ธฐ(size)์ ๋ํ ์ฉ์ด ์ฐจ์ด๊ฐ ๋ชจํธํ ์ ์๋๋ฐ, capacity๋ ๋ฆฌ์คํธ์ ๊ณต๊ฐ ์ฉ๋๋ผ๊ณ ๋ณด๋ฉด๋๊ณ , size๋ ๋ฆฌ์คํธ ์์ ๋ค์ด์๋ ์์๋ค์ ์ด ๊ฐฏ์๋ผ๊ณ ์ดํดํ๋ฉด ๋๋ค.
๋ฉ์๋ | ์ค ๋ช |
boolean add(Object obj) | ArrayList์ ๋ง์ง๋ง์ ๊ฐ์ฒด๋ฅผ ์ถ๊ฐํ๋ค. ์ถ๊ฐ์ ์ฑ๊ณตํ๋ฉด true๋ฅผ ๋ฐํ |
void addAll(Collection c) | ์ฃผ์ด์ง ์ปฌ๋ ์ ์ ๋ชจ๋ ๊ฐ์ฒด๋ฅผ ์ ์ฅํ๋ค.(๋ง์ง๋ง index์ ๋ค๋ก ๋ถ์) |
ArrayList<String> list = new ArrayList<>(10); // ์ฉ๋(capacity)๋ฅผ 10์ผ๋ก ์ค์
list.add("A");
list.add("B");
list.add("C");
list.add("D");
list.add("E");
list.add("F");
list.size(); // ํฌ๊ธฐ(size)๋ 6 (๋ค์ด์๋ ์์์ ์ด ๊ฐ์)

๋ํ addAll() ๋ฉ์๋๋ฅผ ํตํด ์ผ์ผ์ด ์์๋ฅผ ์ถ๊ฐํ๋๊ฒ ์๋ ์ปฌ๋ ์
์์ฒด๋ฅผ ๊ทธ๋๋ก ๋ฐ์์ ์ถ๊ฐ๋ ๊ฐ๋ฅํ๋ค.
ArrayList<String> list1 = new ArrayList<>();
list1.add("1");
list1.add("2");
ArrayList<String> list2 = new ArrayList<>();
list2.add("3");
list2.add("4");
list1.addAll(list2); // list1์ list2์ ๋ด์ฉ์ ์ถ๊ฐํ๋ค.
System.out.println(list1); // [1, 2, 3, 4]
ArrayList ์์ ์ฝ์
๋ฆฌ์คํธ์ ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ๋ ์ถ๊ฐ๋๋ ์์น๋ฅผ ์ง์ ํ์ฌ ์ฝ์ ํ ์ ์๋ค.
์ด๋ ์ง์ ๋ ์์น์ ์์๋ฅผ ๋ฃ์์ ์๊ฒ ๊ธฐ์กด์ ์์๋ค์ด ํ์นธ์ฉ ๋ค๋ก ์ด๋๋๋ฉด์ ๋น๊ณต๊ฐ์ ๋ง๋ค์ด์ค๋ค. ์ ์ํ ์ ์ ํ์นธ์ฉ ๋ฐ์ดํฐ๋ค์ ๋ค๋ก ๋ฐ์ด๋ด๋ ๋์์ ๊ฝค๋ ๋น์ฉ์ด ํฌ๊ธฐ ๋๋ฌธ์ ArrayList์ ์ฌ์ด์ฆ๊ฐ ์ปค์ง ์๋ก ๋นํจ์จ์ ์ด ๋๋ค. (์ด๋ ArrayList ์ปฌ๋ ์ ์ ๋จ์ ์ด๊ธฐ๋ ํ๋ค)
๋ฉ์๋ | ์ค ๋ช |
void add(int index, Object element) | ์ง์ ๋ ์์น(index)์ ๊ฐ์ฒด๋ฅผ ์ ์ฅํ๋ค. ์๋ฆฌ์ ์๋ ๊ธฐ์กด์ ๋ฐ์ดํฐ๋ ๋ค๋ก ๋ฐ๋ ค๋๊ธฐ๋ง ํ ๋ฟ ์ญ์ ๋์ง ์๋๋ค. |
void addAll(int index, Collection c) | ์ง์ ํ ์์น๋ถํฐ ์ฃผ์ด์ง ์ปฌ๋ ์
์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ค. ์๋ฆฌ์ ์๋ ๊ธฐ์กด์ ๋ฐ์ดํฐ๋ ๋ค๋ก ๋ฐ๋ ค๋๊ธฐ๋ง ํ ๋ฟ ์ญ์ ๋์ง ์๋๋ค. |
ArrayList<String> list = new ArrayList<>(8);
list.add("1");
list.add("2");
list.add("3");
list.add("4");
list.add("5");
// 3๋ฒ์งธ ์ธ๋ฑ์ค ์๋ฆฌ์ ์์ ์ฝ์
list.add(3, "A");
System.out.println(list); // [1, 2, 3, A, 4, 5]

ArrayList ์ฝ์ ์ฃผ์์
์์น๋ฅผ ์ง์ ํ์ฌ ์ฝ์ ํ ๋ ์ธ๋ฑ์ค๊ฐ ๋ฆฌ์คํธ์ capacity๋ฅผ ๋์ง ์๋๋ก ์กฐ์ ์ด ํ์ํ๋ค.
๋ง์ผ ๋ค์๊ณผ ๊ฐ์ด ์ก๋ฑ๋ง๊ฒ 100๋ฒ์งธ ์ธ๋ฑ์ค ์์น์ ์์๋ฅผ ๋ฃ์ผ๋ ค๊ณ ํ๋ค๋ฉด IndexOutOfBoundsException ์์ธ๊ฐ ๋ฐ์ํ๊ฒ ๋๋ค.
list.add(100, "OMG");
๋น์ฐํ ๋ฆฌ์คํธ์ ์ฉ๋ ๋ณด๋ค ๋์ด์ ์ธ๋ฑ์ค๋ก ์ฝ์ ํ๊ฒ ๋๋ฉด ์๋ฌ๊ฐ ๋๋ ๊ฒ ์ฏค์ ์ฝ๊ฒ ์ดํด๊ฐ ๊ฐ๋ฅํ๋ค.
ํ์ง๋ง ๋ฆฌ์คํธ์ ์ฉ๋์ ๋ง์ถฐ์๋ ์ ์ฌ๋ ์์์ ๋ง์ง๋ง ์์น(size ๊ฐ)์์ ๋ฒ์ด๋๋ IndexOutOfBoundsException์ด ๋ฐ์ํ๋ค.
์๋ฅผ ๋ค์ด ๋ค์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ๋ฆฌ์คํธ ์ฉ๋์ ๋ง์ถฐ์ ์ธ๋ฑ์ค๋ฅผ ์ง์ ํ์ง๋ง, ์ถ๊ฐ๋๋ ์์น๋ฅผ ์์ 5 ๋ฐ๋ก ๋ค์์ด ์๋ ๊ฑด๋๋ฐ์ด ์ถ๊ฐ๋๋ ์ํฉ์ ๋ค ์ ์๋ค.

์ฉ๋์ ๋ง์ถฐ ์ฝ์ ํ๋๋ฐ ๋ฌด์จ ๋ฌธ์ ๊ฐ ์๋๋ ์ถ๊ฒ ์ง๋ง, ์์์ ArrayList์ ํน์ง์ ๋ํด ๋ค๋ค๋ฏ์ด ArrayList๋ ๋ฐ์ดํฐ๊ฐ ์ฐ์๋ ์๋ฃ๊ตฌ์กฐ ๋ผ๋ ๊ท์น์ด ์ ํด์ ธ ์๊ธฐ ๋๋ฌธ์ ์ด๋ฌํ ํ์๋ ๋ถ๊ฐ๋ฅํ๋ค.
์ฆ, ๋ฆฌ์คํธ์ ๋ฌผ๋ฆฌ์ ์ธ ๊ณต๊ฐ์ ํฌ๊ธฐ(capacity)๋ 8์ด๋ฏ๋ก ์ถฉ๋ถํ๋๋ผ๋ ๋ ผ๋ฆฌ์ ์ธ ๊ณต๊ฐ(size)์ 5์ด๊ธฐ ๋๋ฌธ์ 7๋ฒ์งธ ๊ณต๊ฐ์ ๊ฐ ์ฝ์ ์ ๋ ผ๋ฆฌ์ ์ธ ๊ณต๊ฐ(size)์ ๋์ ์ ์์ด ๋ถ๊ฐ๋ฅ๋ค๋ ํด์์ด ๋๋ค. ๋ฐ๋ผ์ ๋ ผ๋ฆฌ์ ์ธ ๊ณต๊ฐ์ ๋์ด ์ ๊ทผํ ๊ฒฝ์ฐ IndexOutOfBoundsException์ด ๋ฐ์ํ๋ ๊ฒ์ด๋ค.
ArrayList ์์ ์ญ์
์์์ ์ญ์ ์ญ์ ์ค๊ฐ์ ์์นํ ์์๋ฅผ ์ ๊ฑฐํ ๊ฒฝ์ฐ, ๋๋จธ์ง ์์๋ค์ด ๋น ๊ณต๊ฐ์ ์ฑ์ฐ๋ ค ์์ชฝ์ผ๋ก ์ด๋๋๊ฒ ๋๋ค.
๋ฉ์๋ | ์ค ๋ช |
Object remove(int index) | ์ง์ ๋ ์์น(index)์ ์๋ ๊ฐ์ฒด๋ฅผ ์ ๊ฑฐํ๋ค. |
boolean remove(Object obj) | ์ง์ ๋ ๊ฐ์ฒด๋ฅผ ์ ๊ฑฐํ๋ค.(์ฑ๊ณตํ๋ฉด true) |
boolean removeAll(Collection c) | ์ง์ ํ ์ปฌ๋ ์ ์ ์ ์ฅ๋ ๊ฒ๊ณผ ๋์ผํ ๊ฐ์ฒด๋ค์ ArrayList์์ ์ ๊ฑฐํ๋ค. |
void clear() | ArrayList๋ฅผ ์์ ํ ๋น์ด๋ค. |
boolean retainAll(Collection c) | ArrayList์ ์ ์ฅ๋ ๊ฐ์ฒด ์ค์์ ์ฃผ์ด์ง ์ปฌ๋ ์
๊ณผ ๊ณตํต๋ ๊ฒ๋ค๋ง ๋จ๊ธฐ๊ณ ์ ๊ฑฐํ๋ค. (removeAll ๋ฐ๋ ๋ฒ์ ) |
ArrayList<String> list = new ArrayList<>(8);
list.add("1");
list.add("2");
list.add("3");
list.add("4");
list.add("5");
// 2๋ฒ์งธ ์ธ๋ฑ์ค ์๋ฆฌ์ ์์ ์ญ์
list.remove(2);
System.out.println(list); // [1, 2, 4, 5]

๋ง์ผ ๋ชจ๋ ๊ฐ์ ์น ์ ๊ฑฐํ๋ ค๋ฉด, ์ผ์ผํ ๋ฐ๋ณต๋ฌธ์ ๋๋ ค ์ ๊ฑฐํ์ง๋ง๊ณ ๊ฐ๋จํ clear() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
ArrayList<String> list1 = new ArrayList<>();
list1.add("1");
list1.add("2");
list1.add("3");
list1.clear(); // list1์ ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ ๋น์ด๋ค.
System.out.println(list1); // []
ArrayList ์์ ๊ฒ์
๋ฉ์๋ | ์ค ๋ช |
boolean isEmpty() | ArrayList๊ฐ ๋น์ด์๋์ง ํ์ธํ๋ค. |
boolean contains(Object obj) | ์ง์ ๋ ๊ฐ์ฒด(obj)๊ฐ ArrayList์ ํฌํจ๋์ด ์๋์ง ํ์ธํ๋ค. |
int indexOf(Object obj) | ์ง์ ๋ ๊ฐ์ฒด(obj)๊ฐ ์ ์ฅ๋ ์์น๋ฅผ ์ฐพ์ ๋ฐํํ๋ค. |
int lastIndexOf(Object obj) | ์ง์ ๋ ๊ฐ์ฒด(obj)๊ฐ ์ ์ฅ๋ ์์น๋ฅผ ๋ค์์ ๋ถํฐ ์ญ๋ฐฉํฅ์ผ๋ก ์ฐพ์ ๋ฐํํ๋ค. |
ArrayList<String> list1 = new ArrayList<>();
list1.add("A");
list1.add("B");
list1.add("C");
list1.add("A");
// list์ A๊ฐ ์๋์ง ๊ฒ์ : true
list1.contains("A");
// list์ D๊ฐ ์๋์ง ์์ฐจ์ ์ผ๋ก ๊ฒ์ํ๊ณ index๋ฅผ ๋ฐํ (๋ง์ผ ์์ผ๋ฉด -1)
list1.indexOf("A"); // 0
// list์ D๊ฐ ์๋์ง ์ฐ์์ผ๋ก ๊ฒ์ํ๊ณ index๋ฅผ ๋ฐํ (๋ง์ผ ์์ผ๋ฉด -1)
list1.lastIndexOf("A"); // 3
ArrayList ์์ ์ป๊ธฐ
๋ฉ์๋ | ์ค ๋ช |
Object get(in index) | ์ง์ ๋ ์์น(index)์ ์ ์ฅ๋ ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ค. |
List subList(int fromIndex, int toIndex) | fromIndex๋ถํฐ toIndex์ฌ์ด์ ์ ์ฅ๋ ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ค. |
๊ฐ๋ณ ๋จ์ผ ์์๋ฅผ ์ป๊ณ ์ ํ๋ฉด get ๋ฉ์๋๋ก ์ป์ด์ฌ ์ ์๋ค.
ArrayList<String> list = new ArrayList<>(18);
list.add("1");
list.add("2");
list.add("3");
list.add("4");
list.add("5");
list.get(0); // "1"
list.get(3); // "4"
๋ง์ฝ ๋ฒ์ ์์๋ฅผ ์ป๊ณ ์ ํ๋ฉด List subList(int fromIndex, int toIndex) ๋ฉ์๋๋ก ๊ฐ์ ธ์ฌ ์ ์๋ค. ์ด ๋ฉ์๋๋ fromIndex ๋ถํฐ toIndex - 1 ์ฌ์ด์ ์ ์ฅ๋ ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ค.
ArrayList<String> list = new ArrayList<>(18);
list.add("P");
list.add("r");
list.add("o");
list.add("g");
list.add("r");
list.add("a");
list.add("m");
// list[0] ~ list[6] ๋ฒ์ ๋ฐํ
list.subList(0, 7); // [P, r, o, g, r, a, m]
// list[3] ~ list[6] ๋ฒ์ ๋ฐํ
list.subList(3, 7); // [g, r, a, m]
// list[3] ~ list[5] ๋ฒ์ ๋ฐํ
list.subList(3, 6); // [g, r, a]

ArrayList ์์ ๋ณ๊ฒฝ
๋ฉ์๋ | ์ค ๋ช |
Object set(int index, Object obj) | ์ฃผ์ด์ง ๊ฐ์ฒด(obj)๋ฅผ ์ง์ ํ ์์น(index)์ ์ ์ฅํ๋ค. ์๋ฆฌ์ ์๋ ๊ธฐ์กด์ ๋ฐ์ดํฐ๋ ์ญ์ ๋๊ณ ์๋ก์ด ๋ฐ์ดํฐ๊ฐ ๋์ฒด๋์ด ๋ค์ด๊ฐ๋ค. |
ArrayList<String> list1 = new ArrayList<>();
list1.add("list1");
list1.add("list1");
list1.add("list1");
// index 1๋ฒ์ ๋ฐ์ดํฐ๋ฅผ ๋ฌธ์์ด "setData"๋ก ๋ณ๊ฒฝํ๋ค.
list1.set(1, "setData");
System.out.println(list1); // [list1, setData, list1]
ArrayList ์ฉ๋ ํ์ฅ
ArrayList๋ ์์ฑํ ๋ ์ฉ๋์ด ์ ํ ์ ์์ง๋ง, ๋ฐ์ดํฐ๊ฐ ์ถ๊ฐ๋๋ฉด์ ์๋์ผ๋ก ์ฉ๋(Capacity)์ ๋๋ ค์ค๋ค.
๋ง์ผ ์ ํด์ง ์ฉ๋๋ณด๋ค ๋๊ฒ ๋ฐ์ดํฐ๋ฅผ ์ ์ฌํ ๊ฒฝ์ฐ, ์์ฒด์ ์ผ๋ก ๋ด๋ถ ๋ฐฐ์ด์ ํฐ ์ฌ์ด์ฆ๋ก ์๋ก ๋ง๋ค๊ณ ๊ธฐ์กด์ ๋ฐฐ์ด์์ ์์๋ค์ ๋ณต์ฌํจ์ผ๋ก์จ, ๊ฐ์ ์ ์ผ๋ก ๋ฆฌ์คํธ์ ์ฉ๋์ ํ์ฅ์ํค๊ฒ ๋๋ค. ํ์ง๋ง ์ด๋ฌํ ๊ฐ๋ณ์ ์ธ ๋์์ ๋ฆฌ์คํธ๋ฅผ ๋ค๋ฃจ๋๋ฐ์๋ ํธํ์ง๋ง, ๋ฐฐ์ด ๋ณต์ฌ ๋์ ์์ฒด๊ฐ ์ฑ๋ฅ์ด ๊ทธ๋ฆฌ ์ข์ง์์ ์ค๋ฒํค๋(Overhead)๋ฅผ ๋ฐ์ ์ํค๊ฒ ๋๋ค.
๋ฉ์๋ | ์ค ๋ช |
int size() | ArrayList์ ์ ์ฅ๋ ๊ฐ์ฒด์ ๊ฐ์๋ฅผ ๋ฐํํ๋ค. |
void ensureCapacity(int minCapacity) | ArrayList์ ์ฉ๋์ด ์ต์ํ minCapacity๊ฐ ๋๋๋ก ํ๋ค. |
void trimToSize() | ์ฉ๋์ ํฌ๊ธฐ์ ๋ง๊ฒ ์ค์ธ๋ค (๋น ๊ณต๊ฐ์ ์์ค๋ค.) |
ArrayList<String> list = new ArrayList<>(10); // ์ฉ๋(capacity)๋ฅผ 10์ผ๋ก ์ค์
// ์ฉ๋ 10์ ๋์ ์์ 13๊ฐ ์ถ๊ฐ
list.add("A");
list.add("B");
list.add("C");
list.add("D");
list.add("E");
list.add("F");
list.add("G");
list.add("H");
list.add("I");
list.add("J");
list.add("K");
list.add("L");
list.add("M");
list.size(); // ํฌ๊ธฐ(size)๋ 13 : ์๋์ผ๋ก ์ฉ๋์ด ์ฆ๊ฐ๋์ด ๋ฐ์ดํฐ๋ฅผ ์ ์ฌํจ
๋ฐ๋ผ์ ์ฌ์ฉ๋ ๋ฐ์ดํฐ์ ๊ฐ์๋ฅผ ๋ฏธ๋ฆฌ ์๊ณ ์๋ ๊ฒฝ์ฐ๋ผ๋ฉด ์ ์ด์ ArrayList๋ฅผ ๋ง๋ค ๋๋ถํฐ ํฐ ๊ฐ์ผ๋ก ๋ง๋ค์ด์ฃผ๋ฉด ๋๋ค. ๊ทธ๋ฌ๋ฉด ๋ฐฐ์ด์ด ๋ณต์ฌํ๋ฉด์ ๋ฐ์ํ๋ ์ค๋ฒํค๋๋ฅผ ํผํ ์ ์์ด ์ฑ๋ฅ์ ํ๋ฅผ ๋ฐฉ์งํ ์ ์๊ฒ ๋๋ค.
ํน์ ensureCapacity() ๋ฉ์๋๋ฅผ ์ด์ฉํด ๋ฆฌ์คํธ์ ์ต์ ์ฉ๋์ ์ฌ์ง์ ํจ์ผ๋ก์จ ์คํ ์ค๊ฐ์ ๋ฆฌ์คํธ์ ์ฉ๋์ ๋๋ฆด์๋ ์๋ค.
ArrayList<String> list = new ArrayList<>(5);
list.add("1");
list.add("2");
list.add("3");
list.add("4");
list.add("5");
list.ensureCapacity(10); // ์ต์ ์ฉ๋์ด 5์์ 10์ผ๋ก ์ฌ์ง์
list.add("6");
list.add("7");
System.out.println(list); // [1, 2, 3, 4, 5, 6, 7]
ArrayList ๋ณต์ฌ
๋ฉ์๋ | ์ค ๋ช |
Object clone() | ArrayList๋ฅผ ๋ณต์ ํ๋ค. |
ArrayList<Integer> number = new ArrayList<>();
number.add(1);
number.add(3);
number.add(5);
// ArrayList๋ ๋ด๋ถ์ ์ผ๋ก Object[] ๋ฐฐ์ด๋ก ์ ์ฅํ๊ธฐ ๋๋ฌธ์ ํ๋ณํ์ด ํ์ํจ
ArrayList<Integer> cloneNumber = (ArrayList<Integer>) number.clone();
System.out.println("ArrayList: " + number); // [1, 3, 5]
System.out.println("Cloned ArrayList: " + cloneNumber); // [1, 3, 5]
ArrayList ๋ฐฐ์ด ๋ณํ
๋ฉ์๋ | ์ค ๋ช |
Object[] toArray() | ArrayList์ ์ ์ฅ๋ ๋ชจ๋ ๊ฐ์ฒด๋ค์ ๋ฐฐ์ด๋ก ๋ฐํํ๋ค. |
Object[] toArray(Obejct[] objArr) | ArrayList์ ์ ์ฅ๋ ๋ชจ๋ ๊ฐ์ฒด๋ค์ ๋ฐฐ์ด objArr์ ๋ด์ ๋ฐํํ๋ค. |
ArrayList<String> languages= new ArrayList<>();
languages.add("Java");
languages.add("Python");
languages.add("C");
/* ArrayList<String> ์ String[] ๋ฐฐ์ด๋ก ๋ณํ */
// ๋ฐฉ๋ฒ 1 : ๋ฐฐ์ด๋ก ๋ณํํ๊ณ ๋ฐํ
String[] arr1 = languages.toArray();
// ๋ฐฉ๋ฒ 1 : ๋งค๊ฐ๋ณ์๋ก ์ง์ ๋ ๋ฐฐ์ด์ ๋ด์ ๋ฐํ
String[] arr2 = new String[languages.size()]; // ๋จผ์ ๋ฆฌ์คํธ ์ฌ์ด์ฆ์ ๋ง๊ฒ ๋ฐฐ์ด ์์ฑ
languages.toArray(arr2);
ArrayList ์ ๋ ฌ
ArrayList๋ฅผ ์ ๋ ฌํ ๋ ์ฃผ์ํ ์ ์ sort() ๋ฉ์๋๋ ์ ๋ ฌ๋ ๊ฐ์ ๋ฐํํ๋ ๊ฒ์ด ์๋, ์๋ณธ ๋ฆฌ์คํธ ์์ฒด๋ฅผ ๋ณ๊ฒฝ ์ํจ๋ค.
๋ฉ์๋ | ์ค ๋ช |
void sort(Comparator c) | ์ง์ ๋ ์ ๋ ฌ๊ธฐ์ค(c)์ผ๋ก ArrayList๋ฅผ ์ ๋ ฌํ๋ค. |
ArrayList list1 = new ArrayList();
list1.add("3");
list1.add("2");
list1.add("1");
// ์ค๋ฆ์ฐจ์ ์ ๋ ฌ
list1.sort(Comparator.naturalOrder());
System.out.println(list1); // [1, 2, 3]
// ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ
list1.sort(Comparator.reverseOrder());
System.out.println(list1); // [3, 2, 1]
ArrayList ์ํ
๋ณดํต ArrayList์ ์์๋ค์ ์ํํ ์ผ์ด ์๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด for๋ฌธ์ผ๋ก ์ฒ๋ฆฌํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ผ ๊ฒ์ด๋ค.
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
for(Integer i : list) {
System.out.println(i);
}
ArrayList ์ดํฐ๋ ์ดํฐ
๋ค๋ง ๋ช๋ช ์ปฌ๋ ์ ์์๋ ์ ์ฅ๋ ์์๋ฅผ Iterator ์ธํฐํ์ด์ค๋ก ์ฝ์ด์ค๋๋ก ํ๋ ์ํ ํจํด์ ์งํฅํ๊ธฐ๋ ํ๋ค.
๋ฉ์๋ | ์ค ๋ช |
Iterator iterator() | ArrayList์ Iterator๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ค. |
ListIterator listIterator() | ArrayList์ ListIterator๋ฅผ ๋ฐํํ๋ค. |
ListIterator listIterator(int index) | ArrayList์ ์ง์ ๋ ์์น๋ถํฐ ์์ํ๋ ListIterator๋ฅผ ๋ฐํํ๋ค. |
Collection ์ธํฐํ์ด์ค์์๋ Iterator ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ๋ฐํํ๋ iterator() ๋ฉ์๋๋ฅผ ์ ์ํ์ฌ ๊ฐ ์์์ ์ ๊ทผํ๋๋ก ์ ์ ํ๊ณ ์๋ค. ๋ฐ๋ผ์ Collection ์ธํฐํ์ด์ค๋ฅผ ์์๋ฐ๋ List๋ Set ์ธํฐํ์ด์ค์์๋ iterator() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์ ์๋ค. (Map์ X)
// ์ดํฐ๋ ์ดํฐ ๊ฐ์ฒด ๋ฐํ
Iterator<Integer> iter = lnkList.iterator();
// ๋ง์ผ ๋ค์ ์์๊ฐ ์์ ๊ฒฝ์ฐ ๋ฐ๋ณต
while(iter.hasNext()) {
System.out.println(iter.next()); // ์์๋ฅผ ์ถ๋ ฅํ๊ณ ๋ฐ๋ณต ์์น๋ฅผ ์ด๋
}
๋ํ ArrayList์๋ Iterator ๋ฟ๋ง ์๋๋ผ ๋ฆฌ์คํธ ์ ์ฉ ์ดํฐ๋ ์ดํฐ ๊ฐ์ฒด์ธ ListIterator๋ ์ง์ํ๋ค.
ListIterator ์ธํฐํ์ด์ค๋ Iterator ์ธํฐํ์ด์ค๋ฅผ ์์๋ฐ์ ์ฌ๋ฌ ๊ธฐ๋ฅ์ ์ถ๊ฐํ ์ธํฐํ์ด์ค๋ก์, Iterator๋ ์ปฌ๋ ์ ์ ์์์ ์ ๊ทผํ ๋ ๋จ ๋ฐฉํฅ์ผ๋ก๋ง ์ด๋ํ ์ ์๋ ๋ฐ๋ฉด, ListIterator ์ธํฐํ์ด์ค๋ ์ปฌ๋ ์ ์์์ ๋์ฒด, ์ถ๊ฐ ๊ทธ๋ฆฌ๊ณ ์ธ๋ฑ์ค ๊ฒ์ ๋ฑ์ ์ํ ์์ ์์ ์๋ฐฉํฅ์ผ๋ก ์ด๋ํ๋ ๊ฒ์ ์ง์ํ์ฌ ๋์ฑ ์ฐ์์๊ฐ ๋๋ค.
๊ทธ๋ฆฌ๊ณ Iterator๋ Collection ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ์ปฌ๋ ์ ์์ ๋ชจ๋ ์ฌ์ฉํ ์ ์๋ ๋ฐ๋ฉด, ListIterator๋ ์ค๋ก์ง List ์ปฌ๋ ์ ์์๋ง ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค.
// ListIterator ๊ฐ์ฒด ๋ฐํ
ListIterator<Integer> iter = lnkList.listIterator();
// ๋ง์ผ ๋ค์ ์์๊ฐ ์๋ค๋ฉด ๋ฐ๋ณต
while (iter.hasNext()) {
System.out.println(iter.next()); // ์์๋ฅผ ์ถ๋ ฅํ๊ณ ๋ฐ๋ณต ์์น๋ฅผ ๋ค๋ก ์ด๋
}
// -- ๋ฆฌ์คํธ๋ฅผ ๋๊น์ง ์ํํ ์ํ
// ๋ง์ผ ์ด์ ์์๊ฐ ์๋ค๋ฉด ๋ฐ๋ณต
while (iter.hasPrevious()) {
System.out.println(iter.previous()); // ์์๋ฅผ ์ถ๋ ฅํ๊ณ ๋ฐ๋ณต ์์น๋ฅผ ์์ผ๋ก ์ด๋
}
ArrayList ์ง์ ๊ตฌํํด๋ณด๊ธฐ
ArrayList์ ๋ฉ์๋ ๊ตฌ์ฑ๊ณผ ์์ ์ฌ์ฉ๋ฒ๋ง ๋ณด๋ ๊ฒ๋ณด๋ค ํ๋ฒ ์ง์ ์๋ฃ๊ตฌ์กฐ๋ฅผ ๊ตฌํํด๋ณด๋ฉด ์๋ฐ ์ปฌ๋ ์ ์ ๋ด๋ถ ๋์์ ๋ํด ํ์คํ ์ต๋ ํ ์ ์๋ค. ํนํ๋ ArrayList๋ ๋ฐฐ์ด์ ๊ฐ์ ํ ๊ตฌ์กฐ๋ก์ ์จ๊ฐ ์๋ฐ ๋ฐฐ์ด์ ๋ค๋ฃจ๋ ์ง์๋ค์ด ๋ น์ ์์ด ์ฐ์ต์ ๊ถ์ฅํ๋ ๋ฐ๋ค.
[DS] ๐งฑ ArrayList ์๋ฃ๊ตฌ์กฐ ์ง์ ๊ตฌํ ํด๋ณด๊ธฐ (JAVA)
ArrayList ์๋ฃ๊ตฌ์กฐ ์ฐ์์ ์ธ ๋ฐ์ดํฐ์ ๋ฆฌ์คํธ (๋ฐ์ดํฐ๋ ์ฐ์์ ์ผ๋ก ์ ์ฌ ๋์์ด์ผ ํ๋ฉฐ ์ค๊ฐ์ ๋น๊ณต๊ฐ์ด ์์ผ๋ฉด ์๋๋ค) ArrayList ํด๋์ค๋ ๋ด๋ถ์ ์ผ๋ก Object[] ๋ฐฐ์ด์ ์ด์ฉํ์ฌ ์์๋ฅผ ์ ์ฅ ๋ฐฐ์ด
inpa.tistory.com
# ์ฐธ๊ณ ์๋ฃ
https://youtu.be/1R8H-T1u-7E
https://www.programiz.com/java-programming/library/arraylist/sublist
https://staticclass.tistory.com/97
์ด ๊ธ์ด ์ข์ผ์ จ๋ค๋ฉด ๊ตฌ๋ & ์ข์์
์ฌ๋ฌ๋ถ์ ๊ตฌ๋
๊ณผ ์ข์์๋
์ ์์๊ฒ ํฐ ํ์ด ๋ฉ๋๋ค.