-
[์๋ฐ(JAVA)] ์ปฌ๋ ์ ArrayList, LinkedList, Stack, Queue, Set , MapJAVA 2023. 5. 23. 18:59728x90
๐ท Java ์ปฌ๋ ์
- Java ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ์กฐ์ํ๊ธฐ ์ํ ์๋ฃ ๊ตฌ์กฐ์ ์งํฉ์ด๋ค.
- ๋ฐฐ์ด์ ๋ ๊ณ ๋ํ ์ํจ ๊ฒ์ผ๋ก ๋ค์์ ์ฐธ์กฐํ ๋ฐ์ดํฐ๋ฅผ ๋ ์ฝ๊ณ ํจ๊ณผ์ ์ผ๋ก ์ถ๊ฐ, ๊ฒ์, ์์ ๋ฐ ์ญ์ ๋ฑ์ ํ ์ ์๋๋ก ๋์์ค๋ค.<์ข ๋ฅ>
- List: ์์๊ฐ ์๋ ๋ฐ์ดํฐ์ ์งํฉ (๋ฐ์ดํฐ ์ค๋ณต ํ์ฉ)
- Queue : ๋นจ๋๐ฅค์ฒ๋ผ ํ์ชฝ์์ ๋ฐ์ดํฐ๋ฅผ ๋ฃ๊ณ ๋ฐ๋์ชฝ์์ ๋ฐ์ดํฐ๋ฅผ ๋บ ์ ์๋ ์งํฉ(FIFO: First in First Out) (๋ฐ์ดํฐ ์ค๋ณต ํ์ฉ)
- Set : ์์๊ฐ ์๋ ๋ฐ์ดํฐ์ ์งํฉ (๋ฐ์ดํฐ ์ค๋ณต ํ์ฉ ์ํจ) - ์์์๊ณ ์ค๋ณต์๋ ๋ฐฐ์ด
- Map : ์์๊ฐ ์๋ (Key,Value) ์์ผ๋ก ์ด๋ฃจ์ด์ง ๋ฐ์ดํฐ์ ์งํฉ (Key๊ฐ ์ค๋ณต ํ์ฉ ์ํจ)
Queue vs Set vs Map โ
1. Queue: ๋ฐ์ดํฐ๋ฅผ FIFO(First-In-First-Out) ์์๋ก ์ ์ฅํ๊ณ ์ฒ๋ฆฌํ๋ ์๋ฃ ๊ตฌ์กฐ๋ฅผ ๋ํ๋ด๋ฉฐ, ์ฃผ๋ก ๋๊ธฐ์ด์ด๋ ์์ ํ์ ์ฌ์ฉ๋ฉ๋๋ค.
LinkedList๊ฐ Queue ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ํด๋์ค์ ๋๋ค.
2. Set: ์ค๋ณต์ ํ์ฉํ์ง ์๋ ๋ฐ์ดํฐ์ ์งํฉ์ ๋ํ๋ ๋๋ค.
HashSet๊ณผ TreeSet์ด Set ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ๋ํ์ ์ธ ํด๋์ค์ ๋๋ค.
3. Map: ํค-๊ฐ ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ์๋ฃ ๊ตฌ์กฐ๋ฅผ ๋ํ๋ด๋ฉฐ, ํค๋ ์ค๋ณต๋ ์ ์์ต๋๋ค.
HashMap๊ณผ TreeMap์ด Map ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ๋ํ์ ์ธ ํด๋์ค์ ๋๋ค.
๐ List
: ์์๊ฐ ์๋ ๋ฐ์ดํฐ์ ์งํฉ์ ๋ํ๋ด๋ฉฐ, ๋ฐ์ดํฐ๋ฅผ ์ค๋ณต์ผ๋ก ์ ์ฅํ ์ ์๋ค(๋ฐฐ์ด๊ณผ ์ฑ์ง์ด ๋น์ทํจ)
๐ธ ArrayList
: Array์ฒ๋ผ ๋ฐ์ดํฐ ์์๋ฅผ ์์ฐจ์ ์ผ๋ก ์ ์ฅํ๋ ๋ฐ ์ฌ์ฉ๋๋ ์๋ฃ ๊ตฌ์กฐ์ด๋ฉฐ,
์์ฑ์์ ์ ์์ ์ฐ์๋ ๊ณต๊ฐ์ ์์ฒญํด์ ์ฐธ์กฐํ ๋ณ์๋ค์ ๋ด์๋๊ณ , ๊ฐ์ด ์ถ๊ฐ๋ ๋ ๋ ํฐ ๊ณต๊ฐ์ด ํ์ํ๋ฉด ๋ ํฐ ๊ณต๊ฐ์ ๋ฐ์์ ์ ์ฅํ๋ ๋์ ๋ฐฐ์ด์ด๋ค.
๐ฌ ๊ธฐ๋ฅ
º ์ ์ธ : ArrayList<Integer> intList ํํ๋ก ์ ์ธ
º ์์ฑ : new ArrayList<Integer>(); ํํ๋ก ์์ฑ
º ์ด๊ธฐํ : ์ฌ์ด์ฆ๋ฅผ ์ง์ ํ๋๊ฒ์ด ์๊ธฐ ๋๋ฌธ์ ์ด๊ธฐํ๊ฐ ํ์ ์๋ค.
º ๊ฐ ์ถ๊ฐ : intList.add({์ถ๊ฐํ ๊ฐ}) ํํ๋ก ๊ฐ์ ์ถ๊ฐ
º ๊ฐ ์์ : intList.set({์์ ํ ์๋ฒ}, {์์ ํ ๊ฐ}) ํํ๋ก ๊ฐ์ ์์
º ๊ฐ ์ญ์ : intList.remove({์ญ์ ํ ์๋ฒ}) ํํ๋ก ๊ฐ์ ์ญ์
º ์ ์ฒด ์ถ๋ ฅ : intList.toString() ํํ๋ก ์ ์ฒด ๊ฐ์ ๋๊ดํธ[]๋ก ๋ฌถ์ด์ ์ถ๋ ฅ
º ์ ์ฒด ์ ๊ฑฐ : intList.clear() ํํ๋ก ์ ์ฒด ๊ฐ์ ์ญ์
๐ค ArrayList๊ฐ Array์ ์ฑ์ง์ด ์ ์ฌํ์ง๋ง Array๋ ์ ์ ๋ฐฐ์ด์ด๊ณ ArrayList๋ ๋์ ๋ฐฐ์ด์ด๋ค.
๋๊ฐ์ง๊ฐ ๊ฐ๊ฐ ์ด๋ค ์ํฉ์์ ์ฅ๋จ์ ์ ๊ฐ์ง๋์ง ๊ถ๊ธํด์ก๋ค!
๐ฝ๐ฝ๐ฝ
1. ๊ณตํต์ :
ArrayList์ Array๋ ๋ ๋ค ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๋ฐ ์ฌ์ฉ๋๋ ์๋ฃ ๊ตฌ์กฐ๋ก ์๋์ ๊ฐ์ ๊ณตํต์ ์ ๊ฐ์ง๋ค.
- ๋ฐ์ดํฐ ์ ์ฅ: ArrayList์ Array๋ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ์ ์๋ค.
- ์ธ๋ฑ์ค ๊ธฐ๋ฐ ์ ๊ทผ: ๋ ๋ค ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ์ฌ ์์์ ์ ๊ทผํ ์ ์๋ค.
2. ์ฐจ์ด์ :
1. ํฌ๊ธฐ: Array๋ ๊ณ ์ ํฌ๊ธฐ๋ฅผ ๊ฐ๊ณ ์์ผ๋ฉฐ ์ ์ธํ ๋ ํฌ๊ธฐ๋ฅผ ์ง์ ํด์ผ ํฉ๋๋ค.
ArrayList๋ ํฌ๊ธฐ๊ฐ ๊ฐ๋ณ์ ์ด๋ฉฐ ํ์์ ๋ฐ๋ผ ๋์ ์ผ๋ก ํฌ๊ธฐ๊ฐ ์กฐ์ ๋ฉ๋๋ค.
2. ํ์ : Array๋ ํน์ ๋ฐ์ดํฐ ํ์ ์ ์์๋ง ํฌํจํ ์ ์์ต๋๋ค.
ArrayList๋ ์ ๋ค๋ฆญ์ ์ฌ์ฉํ์ฌ ๋ค์ํ ํ์ ์ ์์๋ฅผ ํฌํจํ ์ ์์ต๋๋ค.
3. ๋ฉ๋ชจ๋ฆฌ ํ ๋น: Array๋ ์์๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์ฐ์์ ์ผ๋ก ํ ๋นํฉ๋๋ค.
ArrayList๋ ๋ด๋ถ์ ์ผ๋ก Array๋ฅผ ์ฌ์ฉํ์ง๋ง, ํฌ๊ธฐ๊ฐ ์กฐ์ ๋ ๋๋ง๋ค ์๋ก์ด Array๋ฅผ ํ ๋นํ๊ณ ๊ธฐ์กด ์์๋ฅผ ๋ณต์ฌํฉ๋๋ค.
4. ์ถ๊ฐ/์ญ์ : Array์ ํฌ๊ธฐ๋ ๊ณ ์ ๋์ด ์์ผ๋ฏ๋ก ์์๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ์ญ์ ํ ์ ์์ต๋๋ค.
ArrayList๋ ๋์ ์ผ๋ก ํฌ๊ธฐ๊ฐ ์กฐ์ ๋๋ฏ๋ก ์์๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ์ญ์ ํ ์ ์์ต๋๋ค.
3. ์ฌ์ฉ ์์:
- Array:
- int[] numbers = new int[5]; // ํฌ๊ธฐ๊ฐ 5์ธ ์ ์ํ Array ์์ฑ
- String[] names = {"John", "Jane", "Tom"}; // ์ด๊ธฐ๊ฐ์ ๊ฐ์ง๋ ๋ฌธ์์ด Array ์์ฑ
- Array๋ ํฌ๊ธฐ๊ฐ ๊ณ ์ ๋์ด ์๊ณ , ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ์ญ์ ํ ํ์๊ฐ ์๋ ๊ฒฝ์ฐ์ ์ฃผ๋ก ์ฌ์ฉ๋๋ค.
- ๋ํ ์ฑ๋ฅ์ด ์ค์ํ ์ํฉ์์ Array๊ฐ ๋ ํจ์จ์ ์ผ ์ ์์ต๋๋ค.
- ArrayList:
- ArrayList<Integer> numbers = new ArrayList<>(); // ์ ์ํ ์์๋ฅผ ๊ฐ์ง๋ ArrayList ์์ฑ
- ArrayList<String> names = new ArrayList<>(Arrays.asList("John", "Jane", "Tom")); // ์ด๊ธฐ๊ฐ์ ๊ฐ์ง๋ ๋ฌธ์์ด ArrayList ์์ฑ
- ArrayList๋ ํฌ๊ธฐ๊ฐ ๋์ ์ผ๋ก ์กฐ์ ๋์ด์ผ ํ๊ฑฐ๋ ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ์ญ์ ํด์ผ ํ๋ ๊ฒฝ์ฐ์ ์ฃผ๋ก ์ฌ์ฉ๋ฉ๋๋ค.
- ๋ํ ๋ค์ํ ํ์ ์ ์์๋ฅผ ํฌํจํด์ผ ํ๋ ์ํฉ์์ ์ ์ฐ์ฑ์ ์ ๊ณตํฉ๋๋ค.
Array๋ ์ ์ธํ ๋ ํฌ๊ธฐ๊ฐ ๊ณ ์ ๋๊ณ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ฐ์์ ์ผ๋ก ํ ๋น๋๊ธฐ ๋๋ฌธ์, ํฌ๊ธฐ๋ฅผ ๋์ ์ผ๋ก ์กฐ์ ํ๊ฑฐ๋ ์์๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ์ญ์ ํ ์ ์๋ค.
๋ง์ฝ Array์ ์์๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ์ญ์ ํด์ผ ํ๋ค๋ฉด, ์๋ก์ด Array๋ฅผ ์์ฑํ๊ณ ๊ธฐ์กด์ ์์๋ฅผ ๋ณต์ฌํ๋ ๋ฐฉ๋ฒ๋ฐ์ ์๋ค.
์ถ๊ฐ ๋๋ ์ญ์ ํ ์์น์ ์์๋ฅผ ์ฝ์ ํ๊ฑฐ๋ ์ญ์ ํ ๋ค, ๊ธฐ์กด์ ์์๋ค์ ์๋ก์ด Array์ ๋ณต์ฌํ์ฌ ํฌ๊ธฐ๋ฅผ ์กฐ์ ํ๋ ๊ณผ์ ์ ๊ฑฐ์ณ์ผ ํ๋ฉฐ, ์ด๋ ์๋์ ์ผ๋ก ๋ฒ๊ฑฐ๋กญ๊ณ ๋นํจ์จ์ ์ผ ์ ์๋ค.
ํฌ๊ธฐ๋ฅผ ๋์ ์ผ๋ก ์กฐ์ ํด์ผ ํ๋ ์ํฉ์์๋ ArrayList๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ ์ ํฉํ๋ค. ArrayList๋ ๋ด๋ถ์ ์ผ๋ก Array๋ฅผ ์ฌ์ฉํ์ง๋ง, ํฌ๊ธฐ ์กฐ์ ์ด ํ์ํ ๋๋ง๋ค ์๋ก์ด Array๋ฅผ ํ ๋นํ๊ณ ๊ธฐ์กด ์์๋ฅผ ๋ณต์ฌํ๋ ์์ ์ ๋ด๋ถ์์ ์ฒ๋ฆฌํ๋ค.์ด๋ฅผ ํตํด ์์์ ์ถ๊ฐ ๋๋ ์ญ์ ๊ฐ ๊ฐํธํ๊ณ ํจ์จ์ ์ผ๋ก ์ด๋ฃจ์ด์ง๋ค.
๋ฐ๋ผ์ ์์์ ์ถ๊ฐ ๋๋ ์ญ์ ๊ฐ ๋น๋ฒํ๊ฒ ๋ฐ์ํ๋ ์ํฉ์์๋ ArrayList๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ ์ ํฉํ๋ค.
โ ์์ ์ค๋ช ๋๋ก๋ผ๋ฉด ArrayList์ ํฌ๊ธฐ๊ฐ ๋ณ๊ฒฝ๋ ๊ฒฝ์ฐ ๊ธฐ์กด ์์๋ฅผ ๋ณต์ฌํด์ ์๋ก์ด Array๋ฅผ ํ ๋นํ๋๊ฑด๋ฐ ๊ทธ๋ผ ๋ด๋ถ์ ์ผ๋ก ์ฐจ์งํ๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋์ด๋์ ๊ฒฐ๋ก ์ ์ผ๋ก ๋น์ฉ์ด ์ฆ๊ฐํ๋๊ฒ ์๋๊น?
๐ ๊ฒฐ๋ก : ๊ฐ๋น์ง ์ปฌ๋ ํฐ๊ฐ ์ฒ๋ฆฌํ๋ค.
ArrayList์ ํฌ๊ธฐ๊ฐ ๋ณ๊ฒฝ๋์ด์ผ ํ๋ ๊ฒฝ์ฐ์๋ ๋ค์๊ณผ ๊ฐ์ ๊ณผ์ ์ ๊ฑฐ์น๊ฒ ๋ฉ๋๋ค.
1. ์๋ก์ด ArrayList๋ฅผ ์์ฑํ๋ค.
2. ๊ธฐ์กด์ ArrayList์ ์๋ ์์๋ค์ ์๋ก์ด ArrayList๋ก ๋ณต์ฌํ๋ค.
3. ์๋ก์ด ArrayList๋ฅผ ๊ธฐ์กด์ ArrayList๋ก ์ฐธ์กฐํ๋ค.
์ด ๊ณผ์ ์์ ๊ธฐ์กด์ ArrayList๋ ๋ ์ด์ ์ฐธ์กฐ๋์ง ์๋ ๊ฐ์ฒด๊ฐ ๋๋ฉฐ, Java์ ๊ฐ๋น์ง ์ปฌ๋ ํฐ๊ฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ํ ์ ์๋๋ก ๋ฉ๋๋ค.
๊ธฐ์กด์ ArrayList๋ ์ญ์ ๋๊ณ , ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ณ์ ์ฐจ์งํ๋ ๊ฒ์ ์๋๊ธฐ๋๋ฌธ์ ArrayList์ ํฌ๊ธฐ๊ฐ ๋ณ๊ฒฝ๋์ด์ผ ํ๋ ๊ฒฝ์ฐ์๋ ๊ธฐ์กด์ ArrayList๋ฅผ ๋ณต์ฌํ์ฌ ์๋ก์ด ArrayList๋ฅผ ์์ฑํ๊ณ ๊ธฐ์กด์ ArrayList๋ ์ญ์ ๋๋ฏ๋ก ๋ฉ๋ชจ๋ฆฌ ๋์๋ ๋ฐ์ํ์ง ์์ต๋๋ค.
๐ค ArrayList์ ๋ํ ์ค๋ช ์ ์ดํด๋๋, ์ฑ๋ฅ์ด ์ค์ํ ๊ฒฝ์ฐ Array๋ฅผ ์ฌ์ฉํ๋๊ฒ ๋ ํจ์จ์ ์ด๋ผ๋ ๋ถ๋ถ์ด ์ดํด๋์ง ์์์ ๋ค์ ์ฐพ์๋ณด์๋ค.
4. Array๋ฅผ ์ฌ์ฉํ์ ๋ ์ฑ๋ฅ๋ฉด์์ ๋ ํจ์จ์ ์ธ ์ด์
1. ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ: Array๋ ๊ณ ์ ํฌ๊ธฐ๋ฅผ ๊ฐ๊ณ ์์ผ๋ฉฐ, ์์๋ค์ด ์ฐ์์ ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ์ ํ ๋น๋๋ค.
์ด๋ก ์ธํด ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ์ด ๋ ํจ์จ์ ์ ๋๋ค. ArrayList๋ ๋ด๋ถ์ ์ผ๋ก Array๋ฅผ ์ฌ์ฉํ์ง๋ง, ํฌ๊ธฐ๊ฐ ๋์ ์ผ๋ก ์กฐ์ ๋ ๋๋ง๋ค ์๋ก์ด Array๋ฅผ ํ ๋นํ๊ณ ๊ธฐ์กด ์์๋ฅผ ๋ณต์ฌํด์ผ ํ๋ฏ๋ก ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ์ด ๋ ๋ง์์ง ์ ์๋ค.
2. ์ ๊ทผ ์๋: Array๋ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ์ฌ ์์์ ์ง์ ์ ๊ทผํ๊ธฐ ๋๋ฌธ์, ArrayList๋ณด๋ค ์ ๊ทผ ์๋๊ฐ ๋น ๋ฆ ๋๋ค. ArrayList๋ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ์ฌ ์์์ ์ ๊ทผํ๋ ๊ฒฝ์ฐ ๋ด๋ถ์ ์ผ๋ก ์ธ๋ฑ์ค ๊ณ์ฐ ๋ฑ์ ์ถ๊ฐ ์์ ์ด ํ์ํ๋ค.
3. ํฌ๊ธฐ ๋ณ๊ฒฝ ๋น๋: Array๋ ๊ณ ์ ํฌ๊ธฐ๋ฅผ ๊ฐ๊ธฐ ๋๋ฌธ์ ํฌ๊ธฐ๋ฅผ ๋์ ์ผ๋ก ๋ณ๊ฒฝํ ํ์๊ฐ ์๋ ์ํฉ์์๋ Array๊ฐ ๋ ํจ์จ์ ์ ๋๋ค. ํฌ๊ธฐ ๋ณ๊ฒฝ ์์ ์ ArrayList์์ ์๋ก์ด Array๋ฅผ ํ ๋นํ๊ณ ์์๋ฅผ ๋ณต์ฌํด์ผ ํ๋ ๋น์ฉ์ด ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ด๋ค.๋ฐ๋ผ์, ํฌ๊ธฐ๊ฐ ๊ณ ์ ๋์ด ์๊ณ ์์์ ์ถ๊ฐ ๋๋ ์ญ์ ๊ฐ ๋น๋ฒํ์ง ์์ผ๋ฉฐ, ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๊ณผ ์ ๊ทผ ์๋๊ฐ ์ค์ํ ๊ฒฝ์ฐ์๋ Array๊ฐ ์ฑ๋ฅ์ ์ผ๋ก ๋ ํจ์จ์ ์ผ ์ ์๋ค. ํ์ง๋ง ์์์ ์ถ๊ฐ ๋๋ ์ญ์ ๊ฐ ๋น๋ฒํ๊ฑฐ๋ ํฌ๊ธฐ๊ฐ ๋์ ์ผ๋ก ๋ณ๊ฒฝ๋์ด์ผ ํ๋ ์ํฉ์์๋ ArrayList๊ฐ ๋ ์ ํฉํ๋ค.
์ฑ๋ฅ์ ๋ํ ์๋์ ์ธ ํจ์จ์ฑ์ ์ํฉ์ ๋ฐ๋ผ ๋ค๋ฅผ ์ ์์ผ๋ฏ๋ก, ์ค์ ์ฌ์ฉ ์์๋ ์ํฉ์ ๋ง๋ ์๋ฃ ๊ตฌ์กฐ๋ฅผ ์ ํํ๋ ๊ฒ์ด ์ค์ํ๋ค.
โ ArrayList ์ ์ธ
// ArrayList๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ import java.util.ArrayList;๋ฅผ ๋จผ์ ์ถ๊ฐํด์ผ๋จ // ArrayList<๋ํผํ์ > ๋ฆฌ์คํธ๋ช = new ArrayList<๋ํผํ์ >(); ArrayList<Integer> intList = new ArrayList<Integer>(); // ์ ์ธ + ์์ฑ
โ ArrayList ์ถ๊ฐ
public static void main(String[] args) { // ArrayList<๋ํผํ์ > ๋ฐฐ์ด๋ช = new ArrayList<๋ํผํ์ >(); ArrayList<Integer> intList = new ArrayList<Integer>(); intList.add(1); // ๋ํผ ํ์ ์ด Intger๋ผ์ 1,2์ ์ถ๊ฐํ ์ ์์ intList.add(2); intList.add("์ซ์"); // ํ์ ๋ถ์ผ์น๋ก ์ค๋ฅ }
โ ArrayList ์์
intList.set(1, 10); // ๋ฆฌ์คํธ ๊ฐ(15)์ 10์ผ๋ก ๋ฐ๊พธ๊ธฐ System.out.println(intList.get(1));
๐ธ LinkedList
: ๋ฉ๋ชจ๋ฆฌ์ ๋จ๋ ๊ณต๊ฐ์ ์์ฒญํด์ ์ฌ๊ธฐ์ ๊ธฐ ๋๋์ด์ ์ค์ ๊ฐ์ ๋ด์๋๊ณ , ์ค์ ๊ฐ์ด ์๋ ์ฃผ์๊ฐ์ผ๋ก ๋ชฉ๋ก์ ๊ตฌ์ฑํ๊ณ ์ ์ฅํ๋ค.
=> ์ค์ ๊ฐ์ด ์๋ ์ฃผ์๊ฐ์ผ๋ก ๋ชฉ๋ก์ ๊ตฌ์ฑํ๊ณ ์ ์ฅํ๋ ์๋ฃ๊ตฌ์กฐ
๊ธฐ๋ณธ์ ์ธ ๊ธฐ๋ฅ์ ArrayList ์ ๋์ผํ์ง๋ง LinkedList ๋ ๊ฐ์ ๋๋์ด ๋ด๊ธฐ ๋๋ฌธ์ ๋ชจ๋ ๊ฐ์ ์กฐํํ๋ ์๋๊ฐ ๋๋ฆฌ๋ค.
๋์ , ๊ฐ์ ์ค๊ฐ์ ์ถ๊ฐํ๊ฑฐ๋ ์ญ์ ํ ๋๋ ์๋๊ฐ ๋น ๋ฅด๋ค.
* ArrayList ์ ๊ฒฝ์ฐ ์ถ๊ฐ, ์ญ์ ์ ๊ทธ ์์๋ฅผ ์ ๋ถ ๋ณด์ ํด์ค์ผ ํ๊ธฐ๋๋ฌธ์ ์๋์ ์ผ๋ก ๋๋ฆฌ๋ค.
โ LinkedList ์์
public static void main(String[] args) { // Linked List // ๋ฉ๋ชจ๋ฆฌ์ ๋จ๋ ๊ณต๊ฐ์ ์์ฒญํด์ ์ฌ๊ธฐ ์ ๊ธฐ ๋๋์ด์ ์ค์ ๊ฐ์ ๋ด๋๋ค // ์ค์ ๊ฐ์ด ์๋ ์ฃผ์๊ฐ์ผ๋ก ๋ชฉ๋ก์ ๊ตฌ์ฑํ๊ณ ์ ์ฅํ๋ ์๋ฃ๊ตฌ์กฐ LinkedList<Integer> linkedList = new LinkedList<Integer>(); linkedList.add(5); linkedList.add(10); linkedList.add(15); System.out.println(linkedList.get(0)); System.out.println(linkedList.get(1)); System.out.println(linkedList.get(2)); System.out.println(linkedList.toString()); // ์ ์ฒด์กฐํ }
-> ์ ์ฒด์กฐํ์ ์๋๊ฐ ์ด๋ ์ด ๋ฆฌ์คํธ์ ๋นํด ํ์ ํ ๋๋ฆฌ๋ค
( ๋ถ์ฐ๋ ๋ฐ์ดํฐ๋ฅผ ์กฐํฉํด์ ๊ฐ์ ธ์์ผํ๊ธฐ ๋๋ฌธ)
โ LinkedList ๊ฐ ์ถ๊ฐ
linkedList.add(2, 4); // 2๋ฒ ์ธ๋ฑ์ค์ 4 ์ถ๊ฐ(๋น ๋ฆ) System.out.println(linkedList.toString()); // [5, 10, 4, 15]
๐ Stack (์คํ)
: Stack์ ๋ฐ์ค์ฒ๋ผ ๋ฐ์ดํฐ๋ฅผ ์์ง์ผ๋ก ์์๋๊ณ ๋ฃ์๋ค๊ฐ ๋นผ๋ ํ์ ์ ์ถ(LIFO, Last-In-First-Out) ๋ฐฉ์์ ๋ฐ๋ฅด๋ ์๋ฃ๊ตฌ์กฐ์ด๋ค.
- ๊ฐ์ฅ ์ต๊ทผ์ ์ถ๊ฐ๋ ํญ๋ชฉ์ด ๋งจ ์์ ์์นํ๋ฉฐ, ์ด ํญ๋ชฉ์ด ๊ฐ์ฅ ๋จผ์ ์ ๊ฑฐ๋๋ค.
- ์คํ์ ์์๋ฅผ ์ถ๊ฐํ๋ ์์ (push()) / ์กฐํ(peek()), ์ ๊ฑฐ(pop()) ์ธ๊ฐ์ง ๊ธฐ๋ฅ์ ์ฃผ๋ก ์ฌ์ฉํ๋ค.
- ์ฃผ๋ก ์ต๊ทผ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ ๋์ดํ๊ฑฐ๋ ํจ์์ ํธ์ถ ์คํ, ๋ธ๋ผ์ฐ์ ์ ์ด์ ํ์ด์ง ๊ธฐ๋ก ๋ฑ์ ์ฌ์ฉ๋๋ค.
// ์คํ (Stack): โโโโโโโโโ โ โ โ 3 โ โ 2 โ โ 1 โ โโโโโโโโโ
โ Stack์ ์ฌ์ฉ์์
public static void main(String[] args) { // Stack (Basket) // ์์ง์ผ๋ก ๊ฐ์ ์์๋๊ณ , ๋ฃ์๋ค๊ฐ ๋บ๋ค (FILO) first in last out // ์ฃผ์๊ธฐ๋ฅ: ๊ฐ ์ถ๊ฐ, ์กฐํ, ๊บผ๋ // push, peek, pop // ์ต๊ทผ ์ ์ ๋ ๋ฐ์ดํฐ๋ฅผ ๋์ดํ๊ฑฐ๋ ๋ฐ์ดํฐ์ ์ค๋ณต์ฒ๋ฆฌ๋ฅผ ๋ง๊ณ ์ถ์ ๋ ์ฌ์ฉํจ Stack<Integer> intStack = new Stack<Integer>(); // ์ ์ธ intStack.push(10); intStack.push(20); intStack.push(30); while (!intStack.isEmpty()) { // intStack์ด empty๊ฐ ์๋๋๊น์ง ๋ฐ๋ณตํ๋ค System.out.println(intStack.pop()); // ์ ์ผ ์ต์ ๋ฐ์ดํฐ๋ถํฐ ๊บผ๋ด์ค๋ค (pop์ ๊บผ๋ด๋ฉด ์ญ์ ๋จ) } }
intStack.push(10); intStack.push(20); intStack.push(30); System.out.println(intStack.peek()); // ์ถ๋ ฅ๊ฐ: 30
๐ Queue (ํ)
Queue๋ ๋นจ๋์ฒ๋ผ ํ์ชฝ์์ ๋ฐ์ดํฐ๋ฅผ ๋ฃ๊ณ ๋ฐ๋์ชฝ์์ ๋ฐ์ดํฐ๋ฅผ ๋บ ์ ์๋ ์งํฉ์ผ๋ก FIFO(First in First Out)๋ฐฉ์์ ๋ฐ๋ฅด๋ ์๋ฃ๊ตฌ์กฐ์ด๋ค.
- ๊ฐ์ฅ ๋จผ์ ์ถ๊ฐ๋ ํญ๋ชฉ์ด ๋งจ ์์ ์์นํ๋ฉฐ, ์ด ํญ๋ชฉ์ด ๊ฐ์ฅ ๋จผ์ ์ ๊ฑฐ๋๋ค.
- ํ์ ์์๋ฅผ ์ถ๊ฐํ๋ ์์ ์ "enqueue"๋ผ๊ณ ํ๊ณ , ์์๋ฅผ ์ ๊ฑฐํ๋ ์์ ์ "dequeue"๋ผ๊ณ ํ๋ค.
- Queue๋ ์์ฑ์๊ฐ ์๋ ์ธํฐํ์ด์ค์ด๊ธฐ ๋๋ฌธ์ ๋ฐ๋ก ์ฌ์ฉ์ด ๋ถ๊ฐ๋ฅํ๋ฉฐ, ์์ฑ์๊ฐ ์กด์ฌํ๋ LinkedList๋ฑ๊ณผ ํจ๊ป ์ฌ์ฉํ์ฌ ์์ฑํ ์ ์๋ค.
- ์ถ๊ฐ(add()), ์กฐํ(peek()), ๊บผ๋ด๊ธฐ_์ญ์ ๋จ(poll())
- ์ฃผ์ ํ์ฉ ์์: ์์ ๋๊ธฐ์ด, ๋ฉ์์ง ํ ๋ฑ
โ Queue ์ฌ์ฉ์์
public static void main(String[] args) { Queue<Integer> intQueue = new LinkedList<>(); // Queue๋ฅผ ์ ์ธ, ์์ฑ intQueue.add(1); intQueue.add(5); intQueue.add(9); while (!intQueue.isEmpty()){ System.out.println(intQueue.poll()); // ์ถ๋ ฅ: 1 -> 5 -> 9 } intQueue.add(1); intQueue.add(5); intQueue.add(9); System.out.println(intQueue.peek()); // ์ถ๋ ฅ: 1 }
๐ Set(์งํฉ)
Set์ ์์๊ฐ ์๋ ๋ฐ์ดํฐ์ ์งํฉ์ผ๋ก ๋ฐ์ดํฐ ์ค๋ณต์ ํ์ฉํ์ง ์์๋ค.
/// Set { 1, 2, 3, 4, 5 }
- Set์ ๋จ๋ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ HashSet, TreeSet ๋ฑ์ผ๋ก ์์ฉํด์ ํจ๊ป ์ฌ์ฉํ ์ ์๋ค.
- ์ฃผ์ ํ์ฉ ์์: ์ค๋ณต ์ ๊ฑฐ, ๋ฉค๋ฒ์ญ ํ ์คํธ ๋ฑ
- ์ถ๊ฐ(add()), ์กฐํ(.get(์๋ฒ)), ์ญ์ (.remove()), ํฌํจ์ฌ๋ถ ํ์ธ_๋ ผ๋ฆฌ๊ฐ์ถ๋ ฅ(.contains(ํ์ธํ ๊ฐ))
โ Set ์ฌ์ฉ์์
public static void main(String[] args) { Set<Integer> intSet = new HashSet<>(); // ์ ์ธ ๋ฐ ์์ฑ intSet.add(1); intSet.add(12); intSet.add(5); intSet.add(9); intSet.add(12); // ์ค๋ณต๋ถ๊ฐ๋ก ๋ฎ์ด์ฐ๊ธฐ๋จ for(Integer value:intSet) { System.out.println(value); } }
intSet.add(1);
intSet.add(12); ์ค๋ณต์ผ๋ก ๋ง์ง๋ง๊ฐ์ ๋ฎ์ด์ฐ๊ธฐ ๋์์
intSet.add(5);
intSet.add(9);
intSet.add(12);-> ๊ฒฐ๊ณผ๊ฐ (์ค๋ณต ์ ๊ฑฐ๋จ)
โ contains ์ฌ์ฉ
: ์ด๋ค ๊ฐ์ด ์กด์ฌํ๋์ง ์ฌ๋ถ๋ฅผ ํ์ธํ ๋ ์ฌ์ฉํ๋ค.
true or fales
System.out.println(intSet.contains(2)); //intSet์ด 2๋ฅผ ํฌํจํ๊ณ ์๋์ง ์ฌ๋ถ ํ์ธ System.out.println(intSet.contains(5));
๐TIP) HashSet vs TreeSet vs LinkedHashSet
HashSet : ๊ฐ์ฅ ๋น ๋ฅด๋ฉฐ ์์๋ฅผ ์ ํ ์์ธกํ ์ ์์
TreeSet : ์ ๋ ฌ๋ ์์๋๋ก ๋ณด๊ดํ๋ฉฐ ์ ๋ ฌ ๋ฐฉ๋ฒ์ ์ง์ ํ ์ ์์
LinkedHashSet : ์ถ๊ฐ๋ ์์, ๋๋ ๊ฐ์ฅ ์ต๊ทผ์ ์ ๊ทผํ ์์๋๋ก ์ ๊ทผ ๊ฐ๋ฅ
๋ณดํต HashSet ์ ์ฃผ๋ก ์ฐ๋๋ฐ ์์๋ณด์ฅ์ด ํ์ํ ๊ฒฝ์ฐ์๋ LinkedHashSet ์ ์ฃผ๋ก ์ฌ์ฉํ๋ค.
๐ Map
: Map์ ํค-๊ฐ(key-value) ์์ผ๋ก ์ด๋ฃจ์ด์ง ์๋ฃ๊ตฌ์กฐ๋ก, key๊ฐ์ uniqueํ๊ฒ ๋ณด์ฅ๋๋ค.
- ์๋ฒ์ผ๋ก ์กฐํํ๋ ๊ธฐ์กด๋ฐฉ์์์ ํน์ key๊ฐ์ ๋งค์นญ๋๋ vlaue๊ฐ์ผ๋ก ์กฐํํ ์ ์๋ค.
- ๋งต์ ์๋ก์ด ํค-๊ฐ ์์ ์ถ๊ฐํ๊ฑฐ๋ ๊ธฐ์กด์ ์์ ์ ๊ฑฐํ๋ ์์ ์ด ๊ฐ๋ฅํ๋ค.
- Map ์ ๊ทธ๋ฅ Map์ผ๋ก ์ธ์๋์์ง๋ง HashMap, TreeMap๋ฑ์ผ๋ก ์์ฉํ์ฌ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- ์ถ๊ฐ(.put({์ถ๊ฐํ Key๊ฐ}, {์ถ๊ฐํ Value๊ฐ})), ์กฐํ(.get(์กฐํํ Key๊ฐ)), ์ญ์ (.remove(์ญ์ ํ Key๊ฐ)), ์ ์ฒด key์กฐํ(.keySet()), ์ ์ฒด value ์กฐํ(.values())
- ์ฃผ์ ํ์ฉ ์์: ๋ฐ์ดํฐ๋ฒ ์ด์ค, ์ฌ์ , ์ค์ ์ ๋ณด ๋ฑ
โ Map ์์
public static void main(String[] args) { // Map : key-value pair // key๋ผ๋ ๊ฐ์ผ๋ก uniqueํ๊ฒ ๋ณด์ฅ๋์ด์ผ ํจ. // key๋ String, value๋ Integer๋ก ์ ์ธ Map<String, Integer> intMap = new HashMap<>(); intMap.put("์ผ", 1); intMap.put("์ด", 2); intMap.put("์ผ", 3); intMap.put("์ผ", 33); // ์ค๋ณต key intMap.put("์ผ", 3333); // ์ค๋ณต key for(String key:intMap.keySet()){ // keySet: key๊ฐ๋ง ๋นผ์ ๋ฐฐ์ด๋ก ๋ง๋๋ ๊ธฐ๋ฅ System.out.println(key); }
์ค๋ณต๋ key๋ ์๋ตํด๋ฒ๋ฆผ.
์ค๋ณต key๋ ๋ฎ์ด์ฐ๊ธฐ๊ฐ ์งํ๋๊ธฐ ๋๋ฌธ์
์ถ๋ ฅ์ ๊ฐ์ฅ ๋ง์ง๋ง ๊ฐ์ด ๋์ค๊ฒ ๋๋ค.
๋ฒ์ธ) HashMap ํค, ๋ฒจ๋ฅ ์ถ๋ ฅ๋ฐฉ๋ฒ
https://imcodiiing.tistory.com/manage/posts/
๊ฐ ์ข ๋ฅ๋ณ ๋ช ๋ น์ด ์ ๋ฆฌ
์ข ๋ฅ ArrayList LinkedList Stack Queue Set Map ์ ์ธ ๋ฐ ์์ฑ ArrayList <integer> IntList
= new ArrayList<Integer>();LinkedList<Integer> linkedList
= new LinkedList<>();Stack<Integer> intStack = new Stack<Integer>(); Queue<Integer> intQueue = new LinkedList<>(); Set<Integer> intSet = new HashSet<Integer>(); ๊ฐ ์ถ๊ฐ intList.add({์ถ๊ฐํ ๊ฐ}) linkedList.add({์ถ๊ฐํ ๊ฐ}) intStack.push({์ถ๊ฐํ ๊ฐ}) intQueue.add({์ถ๊ฐํ ๊ฐ}) intSet.add({์ถ๊ฐํ ๊ฐ}) intMap.put({์ถ๊ฐํ Key๊ฐ},{์ถ๊ฐํ Value๊ฐ}) ๊ฐ ์ค๊ฐ์ถ๊ฐ linkedList.add({์ถ๊ฐํ ์๋ฒ}, {์ถ๊ฐํ ๊ฐ}) ๊ฐ ์์ intList.set({์์ ํ ์๋ฒ},{์์ ํ ๊ฐ}) linkedList.set({์์ ํ ์๋ฒ}, {์์ ํ ๊ฐ}) ๊ฐ ์ญ์ intList.remove({์ญ์ ํ ์๋ฒ}) linkedList.remove({์ญ์ ํ ์๋ฒ}) intSet.remove({์ญ์ ํ ๊ฐ}) ์ ์ฒด ์ถ๋ ฅ intList.toString() linkedList.toString() Key์กฐํ :intMap.keySet()
vallue ์กฐํ
intMap.values()์ ์ฒด ์ ๊ฑฐ intList.clear() linkedList.clear() ํน์ ๊ฐ ์ ๊ฑฐ intMap.remove({์ญ์ ํ Key๊ฐ}) ์กฐํ intStack.peek() intQueue.peek() intSet.get({์ดํํ ์๋ฒ}) intMap.get({์กฐํํ Key๊ฐ}) ๊บผ๋ด๊ธฐ intStack.pop() intQueue.poll() ๊ฐ ํฌํจ ํ์ธ intSet.contains({ํฌํจํ์ธ ํ ๊ฐ})
์๋ฃ๊ตฌ์กฐ๋ค์ ๊ฐ๊ฐ์ ํน์ฑ๊ณผ ํ์ฉ ๋ชฉ์ ์ ๋ฐ๋ผ ์ฌ์ฉ๋ฉ๋๋ค.
Stack(์คํ)๊ณผ Queue(ํ)๋ ๋ฐ์ดํฐ์ ์ฝ์ ๊ณผ ์ญ์ ์ ์ง์ค๋์ด ์๋๋ฐ,
โStack(์คํ)์ ๊ฐ์ฅ ์ต๊ทผ์ ์ถ๊ฐ๋ ํญ๋ชฉ์ ์ ๊ทผํ๋ ๊ฒฝ์ฐ ์ฃผ๋ก ์ฌ์ฉ๋ฉ๋๋ค.
โQueue(ํ)๋ ๋จผ์ ์ถ๊ฐ๋ ํญ๋ชฉ์ ์ ๊ทผํ๋ ๊ฒฝ์ฐ ์ฃผ๋ก ์ฌ์ฉ๋ฉ๋๋ค.
โSet(์งํฉ)์ ์ค๋ณต๋ ์์๋ฅผ ์ ๊ฑฐํ๊ณ ๊ณ ์ ํ ๊ฐ๋ค์ ๊ด๋ฆฌํ๋ ๋ฐ ์ฌ์ฉ๋๋ฉฐ,
โMap(๋งต)์ ํค-๊ฐ ์์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๊ตฌ์กฐํํ๊ณ ์ ๊ทผํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.728x90'JAVA' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ