๐ญ ๋ฐ๋ณต๋ฌธ(for each)
for each
๋ J2SE 5.0(Java Platform, Standard Edition) ๋ถํฐ ์ถ๊ฐ๋์๋ค.
for each
๋ผ๋ ํค์๋๊ฐ ๋ฐ๋ก ์๋ ๊ฒ์ ์๋๊ณ ๋์ผํ for
๋ฅผ ์ด์ฉํ๋ค.
ํ์ง๋ง ์กฐ๊ฑด์ ๋ถ๋ถ์ด ์กฐ๊ธ ๋ค๋ฅด๋ค. ๋ณดํต ๋ค๋ฅธ ์ธ์ด์์ for each
๋ผ๊ณ ๋ง์ด ํ๋ฏ๋ก ์๋ฐ์์๋ ๋ณดํต for each
๋ฌธ์ด๋ผ๊ณ ๋งํ๋ค.
๋ฌธ๋ฒ์ ์๋์ ๊ฐ๋ค.
for (type var: iterate) {
body-of-loop
}
์ iterate
(: ๋ฐ๋ณตํ๋ค) ๋ ๋ฃจํ๋ฅผ ๋๋ฆด ๊ฐ์ฒด์ด๊ณ iterate
๊ฐ์ฒด์์ ํ๊ฐ์ฉ ์์ฐจ์ ์ผ๋ก var
์ ๋์
๋์ด for
๋ฌธ์ ์ํํ๊ฒ ๋๋ค.
iterate
๋ถ๋ถ์ ๋ค์ด๊ฐ๋ ํ์
์ ๋ฃจํ๋ฅผ ๋๋ฆด ์ ์๋ ํํ์ธ ๋ฐฐ์ด ๋ฐ ArrayList ๋ฑ์ด ๊ฐ๋ฅํ๋ค.
์)
for
๋ฌธ
String [] numbers = {"one", "two", "three"};
for (int i = 0; i < numbers.length; i++) {
System.out.println(numbers[i]);
}
for each
๊ตฌ์กฐ๋ก ๋ณ๊ฒฝํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
String [] numbers = {"one", "two", "three"};
for (String number: numbers) {
System.out.println(number);
}
ArrayList<String> numbers = new ArrayList<String>();
numbers.add("one");
numbers.add("two");
numbers.add("three");
for (String number: numbers) {
System.out.println(number);
}
๋จ, foreach
๋ฌธ์ ๋ฐ๋ก ๋ฐ๋ณตํ์๋ฅผ ๋ช
์์ ์ผ๋ก ์ฃผ๋ ๊ฒ์ด ๋ถ๊ฐ๋ฅํ๊ณ , 1์คํญ์ฉ ์์ฐจ์ ์ผ๋ก ๋ฐ๋ณต๋ ๋๋ง ์ฌ์ฉ๊ฐ๋ฅํ๋ค๋ ์ ์ฝ์ด ์๋ค.
๐ LinkedList
LinkedList๋ฅผ ์์๋ณด๊ธฐ์ ์์ ์ปฌ๋ ์ ํ๋ ์์ํฌ๋ฅผ ์๊ณ ๋์ด๊ฐ์.
์ปฌ๋ ์ ํ๋ ์์ํฌ
๋ฐ์ดํฐ ๊ตฐ์ ์ ์ฅํ๋ ํด๋์ค๋ค์ ํ์คํํ ์ค๊ณ ๋๋ ๋ฐ์ดํฐ ๊ตฐ์ ๋ค๋ฃจ๊ณ ํํํ๊ธฐ ์ํ ๋จ์ผํ๋ ๊ตฌ์กฐ(architecture)๋ฅผ ๋ปํ๋ค.
์ปฌ๋ ์
์ ๋ค์์ ๋ฐ์ดํฐ, ๋ฐ์ดํฐ ๊ทธ๋ฃน์ ์ํ๋ง๊ณ ,
ํ๋ ์์ํฌ๋ ํ์คํ๋ ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์์ ์๋ฏธํ๋ค.
์ปฌ๋ ์
(๋ฐ์ดํฐ ๊ทธ๋ฃน, ๋ค์์ ๋ฐ์ดํฐ)๋ ํฌ๊ฒ ์ธ๊ฐ์ง ์ข
๋ฅ๋ก ๋๋๋ค.
์ด ์ธ๊ฐ์ง ์ปฌ๋ ์
์ ๋ค๋ฃจ๋ ๋ฐ ํ์ํ ๊ธฐ๋ฅ์ ๊ฐ์ง 3๊ฐ์ง ์ธํฐํ์ด์ค๊ฐ ์กด์ฌํ๋๋ฐ, ๋ฐ๋ก
List, Set, Map์ด๋ค.
์ธํฐํ์ด์ค | ํน์ง |
List | ์์ : O ๋ฐ์ดํฐ ์ค๋ณต : O ์) ๋๊ธฐ์ ๋ช ๋จ |
๊ตฌํ ํด๋์ค: ArrayList, LinkedList, Stack, Vector ๋ฑ | |
Set | ์์ : X ๋ฐ์ดํฐ ์ค๋ณต : X ์) ์์ ์ ์ ์งํฉ, ์์์ ์งํฉ |
๊ตฌํ ํด๋์ค: HashSet, TreeSet ๋ฑ | |
Map | ํค(key)์ ๊ฐ(value)์ ์(pair)๋ก ์ด๋ฃจ์ด์ง ๋ฐ์ดํฐ์ ์งํฉ. ์์ : X ํค์ ์ค๋ณต : X ๊ฐ์ ์ค๋ณต : O ์) ์ฐํธ๋ฒํธ, ์ง์ญ๋ฒํธ(์ ํ๋ฒํธ) |
๊ตฌํ ํด๋์ค : HashMap, TreeMap, Hashtable, Properties ๋ฑ |
์ ํ์ List ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ํด๋์ค ์ค ํ๋๊ฐ ๋ฐ๋ก LinkedList์ด๋ค.
๐ก ์ฐธ๊ณ
List ์ Set ์ธํฐํ์ด์ค๋ ๊ณตํต๋ ๋ถ๋ถ์ด ๋ง์ ๊ทธ ๊ณตํต๋ ๋ถ๋ถ์ ๋ชจ์ ๋ง๋ Collection ์ธํฐํ์ด์ค๊ฐ ์๋ค.
์ฆ, List์ Set์ ์กฐ์์ผ๋ก Collection ์ธํฐํ์ด์ค๊ฐ ์๋ ๊ฒ์ด๋ค.๋๋ณด๊ธฐCollection ์ธํฐํ์ด์ค์ ์ ์๋ ๋ํ์ ์ธ ๋ฉ์๋
๋ฉ์๋ ์ค๋ช boolean add(Object o) โญ
boolean addAll(Collection c)์ง์ ๋ ๊ฐ์ฒด(o) ๋๋ Collection(c)์ ๊ฐ์ฒด๋ค์ Collction ์ ์ถ๊ฐํ๋ค. void clear() Collection์ ๋ชจ๋ ๊ฐ์ฒด๋ฅผ ์ญ์ ํ๋ค. boolean contains(Object o)
boolean containsAll(Collection c)์ง์ ๋ ๊ฐ์ฒด(o) ๋๋ Collection์ ๊ฐ์ฒด๋ค์ด Collection์ ํฌํจ๋์ด ์๋์ง ํ์ธํ๋ค. boolean equals(Object o) โญ ๋์ผํ Collection ์ธ์ง ๋น๊ตํ๋ค. int hashCode() Collection์ hash code๋ฅผ ๋ฐํํ๋ค. boolean isEmpty() โญ Collection์ด ๋น์ด์๋์ง ํ์ธํ๋ค. Iterator iterator() Collection์ ๐ขIterator๋ฅผ ์ป์ด์ ๋ฐํํ๋ค. boolean remove(Object o) ์ง์ ๋ ๊ฐ์ฒด๋ฅผ ์ญ์ ํ๋ค. boolean removeAll(Collection c) ์ง์ ๋ Collection์ ํฌํจ๋ ๊ฐ์ฒด๋ค์ ์ญ์ ํ๋ค. boolean retainAll(Collection c) ์ง์ ๋ Colection์ ํฌํจ๋ ๊ฐ์ฒด๋ง์ ๋จ๊ธฐ๊ณ ๋ค๋ฅธ ๊ฐ์ฒด๋ค์ Collection์์ ์ญ์ ํ๋ค. ์ด ์์ ์ผ๋ก ์ธํด Collection์ ๋ณํ๊ฐ ์์ผ๋ฉด true๋ฅผ ๊ทธ๋ ์ง ์์ผ๋ฉด false๋ฅผ ๋ฐํํ๋ค. int size() โญ Collection์ ์ ์ฅ๋ ๊ฐ์ฒด์ ๊ฐ์๋ฅผ ๋ฐํํ๋ค Object[] toArray() Collection์ ์ ์ฅ๋ ๊ฐ์ฒด๋ฅผ ๊ฐ์ฒด ๋ฐฐ์ด(Object[])๋ก ๋ฐํํ๋ค. OBject[] toArray(Object[] a) ์ง์ ๋ ๋ฐฐ์ด์ Collection์ ๊ฐ์ฒด๋ฅผ ์ ์ฅํด์ ๋ฐํํ๋ค.
๐ข Iterator
Iterator๋ ArrayList, HashSet ์ฒ๋ผ ์ปฌ๋ ์ ์ ๋ฐ๋ณตํ๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ ๊ฐ์ฒด์ด๋ค.
์์ธํ
ArrayList
- ์์ O
- ์ค๋ณต O
- List ์ธํฐํ์ด์ค๋ก ๊ตฌํ๋จ
- Object ๋ฐฐ์ด์ ์ด์ฉํด ๋ฐ์ดํฐ๋ฅผ ์์ฐจ์ ์ผ๋ก ์ ์ฅํ๋ค.
- ๋จ์
- ์ฉ๋์ ๋ณ๊ฒฝํด์ผํ ๋ ์๋ก์ด ๋ฐฐ์ด์ ์์ฑํ ํ ๊ธฐ์กด์ ๋ฐฐ์ด๋ก๋ถํฐ ์๋ก ์์ฑ๋ ๋ฐฐ์ด๋ก ๋ฐ์ดํฐ๋ฅผ ๋ณต์ฌํ๋ ๊ตฌ์กฐ๋ผ์ ํจ์จ์ด ๋จ์ด์ง๋ค
๐ก ์ฐธ๊ณ ๋ก ArrayList๋ ๋ฐฐ์ด(Array)์ ๋ค๋ฅด๋ค.
์๋ฃ๊ตฌ์กฐ Array ArrayList ์ฌ์ด์ฆ ์ด๊ธฐํ ์ ๊ณ ์
int[] myArray = new int[6];์ด๊ธฐํ ์ ์ฌ์ด์ฆ๋ฅผ ํ์ํ์ง ์์. ์ ๋์
ArrayList<Integer> myArrayList = new ArrayList<>();์๋ ์ด๊ธฐํ ์ ๋ฉ๋ชจ๋ฆฌ์ ํ ๋น๋์ด ์๋๊ฐ ๋น ๋ฅด๋ค. ์ถ๊ฐ ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌํ ๋นํ์ฌ ์๋๊ฐ ๋๋ฆฌ๋ค ๋ณ๊ฒฝ ์ฌ์ด์ฆ ๋ณ๊ฒฝ ๋ถ๊ฐ ์ถ๊ฐ, ์ญ์ ๊ฐ๋ฅ
add(), remove()๋ค์ฐจ์ ๊ฐ๋ฅ
int[][] multiArray = new int[3][3];๋ถ๊ฐ๋ฅ
ArrayList์ ๋ํ์ ์ธ ์์ฑ์/๋ฉ์๋
๋ฉ์๋ | ์ค๋ช |
ArrayList() | ํฌ๊ธฐ๊ฐ 10์ธ ArrayList๋ฅผ ์์ฑ |
ArrayList(Collection c) โญ | ์ฃผ์ด์ง ์ปฌ๋ ์ ์ด ์ ์ฅ๋ ArrayList๋ฅผ ์์ฑ |
ArrayList(int initialCapacity) โญ | ์ง์ ๋ ์ด๊ธฐ์ฉ๋์ ๊ฐ๋ ArrayList๋ฅผ ์์ฑ (capacity: ์ฉ๋, ๋ฅ๋ ฅ) |
boolean add(Object o) โญ | ArrayList์ ๋ง์ง๋ง์ ๊ฐ์ฒด๋ฅผ ์ถ๊ฐ. ์ฑ๊ณตํ๋ฉด true |
void add(int index, Object element) | ์ง์ ๋ ์์น(index)์ ๊ฐ์ฒด๋ฅผ ์ ์ฅ |
boolean addAll(Collection c) | ์ฃผ์ด์ง ์ปฌ๋ ์ ์ ๋ชจ๋ ๊ฐ์ฒด๋ฅผ ์ ์ฅํ๋ค. |
boolean addAll(int index, Collection c) โญ | ์ง์ ๋ ์์น๋ถํฐ ์ฃผ์ด์ง ์ปฌ๋ ์ ์ ๋ชจ๋ ๊ฐ์ฒด๋ฅผ ์ ์ฅํ๋ค. |
void clear() | ArrayList๋ฅผ ์์ ํ ๋น์ด๋ค. |
Object clone() | ArrayList๋ฅผ ๋ณต์ ํ๋ค. |
boolean contains(Object o) โญ | ์ง์ ๋ ๊ฐ์ฒด(o)๊ฐ ArrayList์ ํฌํจ๋์ด ์๋์ง ํ์ธ |
void ensureCapacity(int minCapacity) | ArrayList์ ์ฉ๋์ด ์ต์ํ minCapacity๊ฐ ๋๋๋กํ๋ค. (capacity: ์ฉ๋, ๋ฅ๋ ฅ) |
Object get(int index) โญ | ์ง์ ๋ ์์น(index)์ ์ ์ฅ๋ ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ค. |
int indexOf(Object o) | ์ง์ ๋๋ ๊ฐ์ฒด๊ฐ ์ ์ฅ๋ ์์น๋ฅผ ์ฐพ์ ๋ฐํํ๋ค. |
boolean isEmpty() | ArrayList๊ฐ ๋น์ด์๋์ง ํ์ธํ๋ค. |
Iterator iterator() | ArrayList์ Iterator๊ฐ์น๋ฅผ ๋ฐํ |
int lastIndexOf(Object o) | ๊ฐ์ฒด(o)๊ฐ ์ ์ฅ๋ ์์น๋ฅผ ๋๋ถํฐ ์ญ๋ฐฉํฅ์ผ๋ก ๊ฒ์ํด์ ๋ฐํ |
ListIterator listIterator() | ArrayList์ ListIterator๋ฅผ ๋ฐํ |
ListIterator listIterator(int index) | ArrayList์ ์ง์ ๋ ์์น๋ถํฐ ์์ํ๋ ListIterator๋ฅผ ๋ฐํ |
Object remove(int index) โญ | ์ง์ ๋ ์์น(index)์ ์๋ ๊ฐ์ฒด๋ฅผ ์ ๊ฑฐํ๋ค. |
boolean remove(Object o) | ์ง์ ํ ๊ฐ์ฒด๋ฅผ ์ ๊ฑฐํ๋ค.(์ฑ๊ณตํ๋ฉด true, ์คํจํ๋ฉด false) |
boolean removeAll(Collection c) | ์ง์ ํ ์ปฌ๋ ์ ์ ์ ์ฅ๋ ๊ฒ๊ณผ ๋์ผํ ๊ฐ์ฒด๋ค์ ArrayList์์ ์ ๊ฑฐํ๋ค. |
boolean retainAll(Colleciton c) โญ | Arraylist์ ์ ์ฅ๋ ๊ฐ์ฒด ์ค์์ ์ฃผ์ด์ง ์ปฌ๋ ์ ๊ณผ ๊ณตํต๋ ๊ฒ๋ค๋ง์ ๋จ๊ธฐ๊ณ ๋๋จธ์ง๋ ์ญ์ ํ๋ค. (retain: ์ ์งํ๋ค) |
Object set(int index, Object element) | ์ฃผ์ด์ง ๊ฐ์ฒด(element)๋ฅผ ์ง์ ๋ ์์น(index)์ ์ ์ฅํ๋ค. |
int size() โญ | ArrayList์ ์ ์ฅ๋ ๊ฐ์ฒด์ ๊ฐ์๋ฅผ ๋ฐํํ๋ค. |
void sort(Comparator c) โญ | ์ง์ ๋ ์ ๋ ฌ ๊ธฐ์ค(c)์ผ๋ก ArrayList๋ฅผ ์ ๋ ฌ |
List subList(int fromIndex, int toIndex) โญ | fromIndex๋ถํฐ toIndex์ฌ์ด์ ์ ์ฅ๋ ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ค. |
Object[] toArray() | ArrayList์ ์ ์ฅ๋ ๋ชจ๋ ๊ฐ์ฒด๋ค์ ๊ฐ์ฒด ๋ฐฐ์ด๋ก ๋ฐํํ๋ค. |
Object toArray(Object[] a) | ArrayList์ ์ ์ฅ๋ ๋ชจ๋ ๊ฐ์ฒด๋ค์ ๊ฐ์ฒด ๋ฐฐ์ด a์ ๋ด์ ๋ฐํํ๋ค. |
void trimToSize() | ์ฉ๋์ ํฌ๊ธฐ์ ๋ง๊ฒ ์ค์ธ๋ค.(๋น ๊ณต๊ฐ์ ์์ค๋ค.) |
ArrayList ์์
package com.java.test;
import java.util.*;
public class Main {
public static void main(String[] args) {
ArrayList list1 = new ArrayList(10);
list1.add(new Integer(5));
list1.add(new Integer(4));
list1.add(new Integer(2));
list1.add(new Integer(0));
list1.add(new Integer(1));
list1.add(new Integer(3));
ArrayList list2 = new ArrayList(list1.subList(1,4));
print(list1, list2);
Collections.sort(list1); // list1๊ณผ list2๋ฅผ ์ ๋ ฌํ๋ค.
Collections.sort(list2);
print(list1, list2);
System.out.println("list1.containsAll(list2) : " + list1.containsAll(list2));
list2.add("B");
list2.add("C");
list2.add(3, "A");
print(list1, list2);
list2.set(3, "AA");
print(list1, list2);
// list1์์ list2์ ๊ฒน์น๋ ๋ถ๋ถ๋ง ๋จ๊ธฐ๊ณ ๋๋จธ์ง๋ ์ญ์ ํ๋ค.
System.out.println("list1.retainAll(list2) : " + list1.retainAll(list2));
print(list1, list2);
// list2์์ list1์ ํฌํจ๋ ๊ฐ์ฒด๋ค์ ์ญ์ ํ๋ค.
// ๋ง์ฝ ๋ณ์ i๋ฅผ ์ฆ๊ฐ์์ผ๊ฐ๋ฉด์ ์ญ์ ํ๋ฉด, ํ ์์๊ฐ ์ญ์ ๋ ๋๋ง๋ค
// ๋น ๊ณต๊ฐ์ ์ฑ์ฐ๊ธฐ ์ํด ๋๋จธ์ง ์์๋ค์ด ์๋ฆฌ ์ด๋์ ํ๊ธฐ ๋๋ฌธ์ ์ฌ๋ฐ๋ฅธ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์๋ค.
for(int i = list2.size() - 1 ; i >= 0 ; i--) {
if(list1.contains(list2.get(i)))
list2.remove(i);
}
print(list1, list1);
}
static void print(ArrayList list1, ArrayList list2) {
System.out.println("list1 :" + list1);
System.out.println("list2 :" + list2);
System.out.println();
}
}
LinkedList
- ๋ฐฐ์ด์ ๋จ์ ์ ๋ณด์ํ๊ธฐ ์ํด ๊ณ ์๋ ์๋ฃ๊ตฌ์กฐ
- ๋ถ์ฐ์์ ์ผ๋ก ์กด์ฌํ๋ ๋ฐ์ดํฐ๋ฅผ ์๋ก ์ฐ๊ฒฐ(link)ํ ํํ
โ ๋ฐฐ์ด์ ๋จ์
1. ํฌ๊ธฐ๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ค.
2. ๋น์์ฐจ์ ์ธ ๋ฐ์ดํฐ์ ์ถ๊ฐ ๋๋ ์ญ์ ์ ์๊ฐ์ด ๋ง์ด ๊ฑธ๋ฆฐ๋ค
๊ฐ ์์(node)๋ค์ ์์ ๊ณผ ์ฐ๊ฒฐ๋ ๋ค์ ์์์ ๋ํ ์ฐธ์กฐ(์ฃผ์๊ฐ)์ ๋ฐ์ดํฐ๋ก ๊ตฌ์ฑ๋์ด ์๋ค.
ex) ์ฐธ์กฐ(์ฃผ์๊ฐ) : 0x300 / ๋ฐ์ดํฐ : 0
class Node {
Node next; // ๋ค์ ์์์ ์ฃผ์๋ฅผ ์ ์ฅ
Object obj; // ๋ฐ์ดํฐ๋ฅผ ์ ์ฅ
}
LinkedList ์ ์ญ์
์ญ์ ํ๊ณ ์ ํ๋ ์์์ ์ด์ ์์๊ฐ ์ญ์ ํ๊ณ ์ ํ๋ ์์์ ๋ค์ ์์๋ฅผ ์ฐธ์กฐํ๋๋ก ๋ณ๊ฒฝํ๊ธฐ๋ง ํ๋ฉด๋๋ค.
๋จ ํ๋์ ์ฐธ์กฐ๋ง ๋ณ๊ฒฝํ๋ฉด ์ญ์ ๊ฐ ์ด๋ฃจ์ด์ง๋ ๊ฒ์ด๋ค.
LinkedList ์ ์ถ๊ฐ
์๋ก์ด ์์๋ฅผ ์์ฑํ ๋ค์ ์ถ๊ฐํ๊ณ ์ ํ๋ ์์น์ ์ด์ ์์์ ์ฐธ์กฐ๋ฅผ ์๋ก์ด ์์์ ๋ํ ์ฐธ์กฐ๋ก ๋ณ๊ฒฝํด์ฃผ๊ณ ,
์๋ก์ด ์์๊ฐ ๊ทธ ๋ค์ ์์๋ฅผ ์ฐธ์กฐํ๋๋ก ๋ณ๊ฒฝํ๊ธฐ๋ง ํ๋ฉด ๋๋ฏ๋ก ์ฒ๋ฆฌ์๋๊ฐ ๋งค์ฐ ๋น ๋ฅด๋ค.
linkedList๋ ์ด๋๋ฐฉํฅ์ด ๋จ๋ฐฉํฅ์ด๊ธฐ ๋๋ฌธ์ ๋ค์ ์์์ ๋ํ ์ ๊ทผ์ ์ฝ์ง๋ง ์ด์ ์์์ ๋ํ ์ ๊ทผ์ ์ด๋ ต๋ค.
์ด ์ ์ ๋ณด์ํ ๊ฒ์ด ๋๋ธ ๋งํฌ๋ ๋ฆฌ์คํธ(์ด์ค ์ฐ๊ฒฐ ๋ฆฌ์คํธ, doubly linked list)์ด๋ค.
๋๋ธ ๋งํฌ๋ ๋ฆฌ์คํธ
๋จ์ํ ๋งํฌ๋ ๋ฆฌ์คํธ์ ์ฐธ์กฐ๋ณ์๋ฅผ ํ๋ ๋ ์ถ๊ฐํ์ฌ ๋ค์ ์์์ ๋ํ ์ฐธ์กฐ๋ฟ ์๋๋ผ ์ด์ ์์์ ๋ํ ์ฐธ์กฐ๊ฐ ๊ฐ๋ฅํ๋๋ก ํ์ ๋ฟ, ๊ทธ ์ธ์๋ ๋งํฌ๋ ๋ฆฌ์คํธ์ ๊ฐ๋ค.
๋๋ธ ๋งํฌ๋ ๋ฆฌ์คํธ๋ ๋งํฌ๋ ๋ฆฌ์คํธ๋ณด๋ค ๊ฐ ์์์ ๋ํ ์ ๊ทผ๊ณผ ์ด๋์ด ์ฝ๊ธฐ ๋๋ฌธ์ ๋งํฌ๋ ๋ฆฌ์คํธ๋ณด๋ค ๋ ๋ง์ด ์ฌ์ฉ๋๋ค.
class Node {
Node next; // ๋ค์ ์์์ ์ฃผ์๋ฅผ ์ ์ฅ
Node previous; // ์ด์ ์์์ ์ฃผ์๋ฅผ ์ ์ฅ
Object obj; // ๋ฐ์ดํฐ๋ฅผ ์ ์ฅ
}
๋๋ธ ์จํ๋ฌ ๋งํฌ๋ ๋ฆฌ์คํธ
์ด์ค ์ํ ์ฐ๊ฒฐ ๋ฆฌ์คํธ.
๋๋ธ ๋งํฌ๋ ๋ฆฌ์คํธ์ ์ ๊ทผ์ฑ์ ๋ณด๋ค ํฅ์ ์ํจ ๊ฒ
๋จ์ํ ๋๋ธ๋งํฌ๋ ๋ฆฌ์คํธ์ ์ฒซ๋ฒ์งธ ์์์ ๋ง์ง๋ง ์์๋ฅผ ์๋ก ์ฐ๊ฒฐ ์ํจ ๊ฒ์ด๋ค.
๋งํฌ๋ ๋ฆฌ์คํธ์ ์์ฑ์์ ๋ฉ์๋
์์ฑ์ ๋๋ ๋ฉ์๋ | ์ค๋ช |
LinkedList() | LinkedList ๊ฐ์ฒด๋ฅผ ์์ฑ |
LinkedList(Colection c) | ์ฃผ์ด์ง ์ปฌ๋ ์ ์ ํฌํจํ๋ LinkedList ๊ฐ์ฒด๋ฅผ ์์ฑ |
boolean add(Object o) | ์ง์ ๋ ๊ฐ์ฒด(o)๋ฅผ LinkedList์ ๋์ ์ถ๊ฐ. ์ ์ฅ์ ์ฑ๊ณตํ๋ฉด true, ์คํจํ๋ฉด false |
void add(int index, Object element) | ์ง์ ๋ ์์น(index)์ ๊ฐ์ฒด(elemnt)๋ฅผ ์ถ๊ฐ |
boolean addAll(Collection c) | ์ฃผ์ด์ง ์ปฌ๋ ์ ์ ํฌํจ๋ ๋ชจ๋ ์์๋ฅผ LinkedList์ ๋์ ์ถ๊ฐํ๋ค. ์ฑ๊ณตํ๋ฉด ture, ์คํจํ๋ฉด false |
boolean addAll(int index, Collection c) | ์ง์ ๋ ์์น(index)์ ์ฃผ์ด์ง ์ปฌ๋ ์ ์ ํฌํจ๋ ๋ชจ๋ ์์๋ฅผ ์ถ๊ฐ. ์ฑ๊ณตํ๋ฉด true. ์คํจํ๋ฉด false |
void clear() | LinkedList์ ๋ชจ๋ ์์๋ฅผ ์ญ์ |
boolean contains(Object c) | ์ง์ ๋ ๊ฐ์ฒด๊ฐ LinkedList์ ํฌํจ๋์๋์ง ์๋ ค์ค |
boolean containsAll(Collection c) | ์ง์ ๋ ์ปฌ๋ ์ ์ ๋ชจ๋ ์์๊ฐ ํฌํจ๋์๋์ง ์๋ ค์ค |
Object get(int index) | ์ง์ ๋ ์์น(index)์ ๊ฐ์ฒด๋ฅผ ๋ฐํ |
int indexOf(Object o) | ์ง์ ๋ ๊ฐ์ฒด๊ฐ ์ ์ฅ๋ ์์น(์์์ ๋ช ๋ฒ์งธ)๋ฅผ ๋ฐํ |
boolean isEmpty() | LinkedList๊ฐ ๋น์ด์๋์ง ์๋ ค์ค๋ค. ๋น์ด์๋ true |
Iterator iterator() | iterator๋ฅผ ๋ฐํํ๋ค. |
int lastIndexOf(Object o) | ์ง์ ๋ ๊ฐ์ฒด์ ์์น(index)๋ฅผ ๋ฐํ(๋๋ถํฐ ์ญ์๊ฒ์) |
ListIterator listIterator() | ListIterator๋ฅผ ๋ฐํํ๋ค. |
ListIterator listIterator(int index) | ์ง์ ๋ ์์น์์๋ถํฐ ์์ํ๋ ListIterator๋ฅผ ๋ฐํ |
Object remove(int index) | ์ง์ ๋ ์์น(index)์ ๊ฐ์ฒด๋ฅผ LinkedList์์ ์ ๊ฑฐ |
boolean remove(Object o) | ์ง์ ๋ ๊ฐ์ฒด๋ฅผ LinkedList์์ ์ ๊ฑฐ, ์ฑ๊ณตํ๋ฉด true. ์คํจํ๋ฉด false |
boolean removeAll(Collection c) | ์ง์ง๋ ์ปฌ๋ ์ ์ด ์์์ ์ผ์นํ๋ ์์๋ฅผ ๋ชจ๋ ์ญ์ |
boolean retainAll(Collection c) | ์ง์ ๋ ์ปฌ๋ ์ ์ ๋ชจ๋ ์์๊ฐ ํฌํจ๋์ด ์๋์ง ํ์ธ |
Object set(int index, Object element) | ์ง์ ๋ ์์น(index)์ ๊ฐ์ฒด๋ฅผ ์ฃผ์ด์ง ๊ฐ์ฒด๋ก ๋ฐ๊ฟ |
int size() | LinkedList์ ์ ์ฅ๋ ๊ฐ์ฒด์ ์๋ฅผ ๋ฐํ |
ListsubList(int fromIndex, Object element) | LinkedList์ ์ผ๋ถ๋ฅผ List๋ก ๋ฐํ |
Object[] toArray() | LinkedList์ ์ ์ฅ๋ ๊ฐ์ฒด๋ฅผ ๋ฐฐ์ด๋ก ๋ฐํ |
Object[] toArray(Object[] a) | LinkedList์ ์ ์ฅ๋ ๊ฐ์ฒด๋ฅผ ์ฃผ์ด์ง ๋ฐฐ์ด์ ์ ์ฅํ์ฌ ๋ฐํ |
Object element() | LinkedList์ ์ฒซ๋ฒ์งธ ์์๋ฅผ ๋ฐํ |
boolean offer(Object o) | ์ง์ ๋ ๊ฐ์ฒด(o)๋ฅผ LinkedList์ ๋์ ์ถ๊ฐ. ์ฑ๊ณตํ๋ฉด true, ์คํจํ๋ฉด false |
Object peek() | LinkedList์ ์ฒซ ๋ฒ์งธ ์์๋ฅผ ๋ฐํ |
Object poll() | LinkedList์ ์ฒซ ๋ฒ์งธ ์์๋ฅผ ๋ฐํ |
Object remove() | LinkedList์ ์ฒซ ๋ฒ์งธ ์์๋ฅผ ์ ๊ฑฐ |
void addFirst(Object o) | LinkedList์ ๋งจ ์์ ๊ฐ์ฒด(o)๋ฅผ ์ถ๊ฐ |
void addLast(Object o) | LinkedList์ ๋งจ ๋์ ๊ฐ์ฒด(o)๋ฅผ ์ถ๊ฐ |
Iterator descendingIterator() | ์ญ์์ผ๋ก ์กฐํํ๊ธฐ ์ํ DescendingIterator๋ฅผ ๋ฐํ |
Object getFirst() | LinkedList์ ์ฒซ ๋ฒ์ฌ ์์๋ฅผ ๋ฐํ |
Object getLast() | LinkedList์ ๋ง์ง๋ง ์์๋ฅผ ๋ฐํ |
boolean offerFirst(Object o) | LinkedList์ ๋งจ ์์ ๊ฐ์ฒด(o)๋ฅผ ์ถ๊ฐ. ์ฑ๊ณตํ๋ฉด true |
boolean offerLast(Object o) | LinkedList์ ๋งจ ๊ธ์ ๊ฐ์ฒด(o)๋ฅผ ์ถ๊ฐ. ์ฑ๊ณตํ๋ฉด true |
Object peekFirst() | LinkedList์ ์ฒซ๋ฒ์งธ ์์๋ฅผ ๋ฐํ |
Object peekLast() | LinkedList์ ๋ง์ง๋ง ์์๋ฅผ ๋ฐํ |
Object pollFirst() | LinkedList์ ์ฒซ๋ฒ์งธ ์์๋ฅผ ๋ฐํํ๋ฉด์ ์ ๊ฑฐ |
Object pollLast() | LinkedList์ ๋ง์ง๋ง ์์๋ฅผ ๋ฐํํ๋ฉด์ ์ ๊ฑฐ |
Object pop() | removeFirst()์ ๋์ผ |
void push(Object o) | addFirst()์ ๋์ผ |
Object removeFirest() | LinkedList์ ์ฒซ๋ฒ์งธ ์์๋ฅผ ์ ๊ฑฐ |
Object removeLast() | LinkedList์ ๋ง์ง๋ง ์์๋ฅผ ์ ๊ฑฐ |
boolean removeFirstOccurrence(Object o) | LinkedList์์ ์ณ๋ฒ์งธ๋ก ์ผ์นํ๋ ๊ฐ์ฒด๋ฅผ ์ ๊ฑฐ |
boolean removeLastOccurrence(Object o) | LinkedList์์ ๋ง์ง๋ง์ผ๋ก ์ผ์นํ๋ ๊ฐ์ฒด๋ฅผ ์ ๊ฑฐ |
LinkedList ์ ArrayList ๋น๊ต
- ์์ฐจ์ ์ผ๋ก(๋ง์ง๋ง ์์๋ถํฐ ์ญ์์ผ๋ก) ์ถ๊ฐ/์ญ์ ํ๋ ๊ฒฝ์ฐ์๋ ArrayList๊ฐ LinkedList๋ณด๋ค ๋น ๋ฅด๋ค
- ArrayList๋ ๋ง์ง๋ง ๋ฐ์ดํฐ๋ถํฐ ์ญ์ ํ ๊ฒฝ์ฐ ๊ฐ ์์๋ค์ ์ฌ๋ฐฐ์น๊ฐ ํ์ํ์ง ์๊ธฐ ๋๋ฌธ์ ๋น ๋ฆ. ๋จ์ง ๋ง์ง๋ง ์์์ ๊ฐ์ null๋ก ๋ฐ๊พธ๊ธฐ๋ง ํ๋ฉด๋๋๊น.
- ์ค๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐ/์ญ์ ํ๋ ๊ฒฝ์ฐ์๋ LinkedList๊ฐ ArrayList๋ณด๋ค ๋น ๋ฅด๋ค
- LinkedList๋ ๊ฐ ์์๊ฐ์ ์ฐ๊ฒฐ๋ง ๋ณ๊ฒฝํด์ฃผ๋ฉด ๋๊ธฐ ๋๋ฌธ์ ๋น ๋ฆ
- ArrayList๋ ๊ฐ ์์๋ค์ ์ฌ๋ฐฐ์น ํ์ฌ ์ถ๊ฐํ ๊ณต๊ฐ์ ํ๋ณดํ๊ฑฐ๋ ๋น ๊ณต๊ฐ์ ์ฑ์์ผํ๊ธฐ ๋๋ฌธ์ ์ฒ๋ฆฌ์๋๊ฐ ๋ฆ๋ค.
์ปฌ๋ ์ | ์ฝ๊ธฐ(์ ๊ทผ์๊ฐ | ์ถ๊ฐ/์ญ์ | ๋น๊ณ |
ArrayList | ๋น ๋ฅด๋ค | ๋๋ฆฌ๋ค | ์์ฐจ์ ์ธ ์ถ๊ฐ์ญ์ ๋ ๋ ๋น ๋ฆ ๋นํจ์จ์ ์ธ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ |
LinkedList | ๋๋ฆฌ๋ค | ๋น ๋ฅด๋ค | ๋ฐ์ดํ๊ฐ ๋ง์์๋ก ์ ๊ทผ์ฑ์ด ๋จ์ด์ง |
๐ Stack
- Last In First Out(LIFO)
- ํ์ฉ ์
- ์์ ๊ณ์ฐ
- ์์๊ดํธ๊ฒ์ฌ
- ์๋ํ๋ก์ธ์์ undo/redo
- ์น๋ธ๋ผ์ฐ์ ์ ๋ค๋ก/์์ผ๋ก
์คํ์ ๋ฉ์๋
๋ฉ์๋ | ์ค๋ช |
boolan empty() | Stack์ด ๋น์ด์๋์ง ์๋ ค์ค๋ค. |
Object peek() | Stack์ ๋งจ ์์ ์ ์ฅ๋ ๊ฐ์ฒด๋ฅผ ๋ฐํ. pop()๊ณผ ๋ฌ๋ฆฌ Stack์์ ๊ฐ์ฒด๋ฅผ ๊บผ๋ด์ง๋ ์์.(๋น์์ ๋๋ EmptyStackException ๋ฐ์) |
Object pop() | Stack์ ๋งจ ์์ ์ ์ฅ๋ ๊ฐ์ฒด๋ฅผ ๊บผ๋ธ๋ค. (๋น์์ ๋๋ EmptyStack |
Object push(Object Item) | Stack์ ๊ฐ์ฒด(item)๋ฅผ ์ ์ฅํ๋ค. |
int search(Object o) | Stack์์ ์ฃผ์ด์ง ๊ฐ์ฒด(o)๋ฅผ ์ฐพ์์ ๊ทธ ์์น๋ฅผ ๋ฐํ. ๋ชป์ฐพ์ผ๋ฉด -1์ ๋ฐํ. (๋ฐฐ์ด๊ณผ ๋ฌ๋ฆฌ ์์น๋ 0์ด ์๋ 1๋ถํฐ ์์) |
๐น Queue
- First In First Out(First In First Out)
- ํ์ฉ ์
- ์ต๊ทผ ์ฌ์ฉ ๋ฌธ์
- ์ธ์์์ ๋๊ธฐ๋ชฉ๋ก
- ๋ฒํผ(buffer)
๋ฉ์๋ | ์ค๋ช |
boolean add(Object o) | ์ง์ ๋ ๊ฐ์ฒด๋ฅผ Queue์ ์ถ๊ฐํ๋ค. ์ฑ๊ณตํ๋ฉด true๋ฅผ ๋ฐํ, ์ ์ฅ๊ณต๊ฐ์ด ๋ถ์กฑํ๋ฉด IlegalStateException ๋ฐ์ |
Object remove() | Queue์์ ๊ฐ์ฒด๋ฅผ ๊บผ๋ด ๋ฐํ. ๋น์ด์์ผ๋ฉด NoSuchElementException ๋ฐ์ |
Object element | ์ญ์ ์์ด ์์๋ฅผ ์ฝ์ด์จ๋ค. peek์ ๋ฌ๋ฆฌ Queue๊ฐ ๋น์์ ๋ NoSuchElementException ๋ฐ์ |
boolean offer(Object o) | Queue์ ๊ฐ์ฒด๋ฅผ ์ ์ฅ. ์ฑ๊ณตํ๋ฉด true, ์คํจํ๋ฉด false๋ฅผ ๋ฐํ |
Object poll() | Queue์ ๊ฐ์ฒด๋ฅผ ๊บผ๋ด์ ๋ฐํ. ๋น์ด์์ผ๋ฉด null์ ๋ฐํ |
Object peek() | ์ญ์ ์์ด ์์๋ฅผ ์ฝ์ด์จ๋ค. Queue๊ฐ ๋น์ด์์ผ๋ฉฐ null์ ๋ฐํ |
PriorityQueue
- Queue ์ธํฐํ์ด์ค์ ๊ตฌํ์ฒด ์ค ํ๋
- ์ ์ฅํ ์์์ ๊ด๊ณ์์ด ์ฐ์ ์์๊ฐ ๋์ ๊ฒ๋ถํฐ ๊บผ๋ธ๋ค
- null์ ์ ์ฅํ ์ ์๋ค(NullPointerException)
- ์ ์ฅ๊ณต๊ฐ์ผ๋ก ๋ฐฐ์ด ์ฌ์ฉ
- ํ(heap)์ด๋ผ๋ ์๋ฃ๊ตฌ์กฐ ํํ๋ก ์ ์ฅ
- ๊ฐ์ฅ ํฐ ๊ฐ์ด๋ ๊ฐ์ฅ ์์ ๊ฐ์ ๋น ๋ฅด๊ฒ ์ฐพ์ ์ ์๋ค.
Deque (Double-Enbed Queue)
- Queue์ ๋ณํ
- ์ ์ชฝ ๋์ ์ถ๊ฐ/์ญ์ ๊ฐ ๊ฐ๋ฅ (Queue๋ ํ ์ชฝ ๋์ผ๋ก๋ง ์ถ๊ฐ/ ์ญ์ ๊ฐ๋ฅ)
- Duque์ ์กฐ์์ด Queue
- ๊ตฌํ์ฒด๋ ArrayDeque, LinkedList
๋ฑ(Deque)์ ๋ฉ์๋์ ๋์ํ๋ ํ์ ์คํ์ ๋ฉ์๋
Deuque | Queue | Stack |
offerLast() | offer() | push() |
pollLast() | pop() | |
pollFirst() | poll() | |
peekFirst() | peek() | |
paeekLast() | peek() |
๐ต ๊ณผ์
LinkedList๋ฅผ ๊ตฌํํ์ธ์
- ์ ์๋ฅผ ์ ์ฅํ๋ ListNode ํด๋์ค๋ฅผ ๊ตฌํํ์ธ์
- ListNode add(ListNode head, ListNode nodeToadd, int position)์ ๊ตฌํํ์ธ์
- ListNode remove(ListNode head, int positionToRemove)๋ฅผ ๊ตฌํํ์ธ์
- boolean contains(ListNode head, ListNode nodeToCheck)๋ฅผ ๊ตฌํํ์ธ์
public class ListNode {
int data;
ListNode next;
public ListNode() {}
public ListNode(int data) {
this.data = data;
this.next = null;
}
public ListNode add(ListNode head, ListNode nodeToAdd, int position) {
ListNode node = head;
//position ์ด์ ๊น์ง ํ์
for (int i = 0; i < position - 1; i++) {
node = node.next;
}
//์ง์ ์์น์ ๋
ธ๋ ์ฝ์
nodeToAdd.next = node.next;
node.next = nodeToAdd;
return head;
}
public ListNode remove(ListNode head, int positionToRemove) {
ListNode node = head;
//์ญ์ ์์น๊ฐ ๊ฐ์ฅ ์์ธ๊ฒฝ์ฐ
if(positionToRemove == 0){
ListNode deleteToNode = node;
head = node.next;
deleteToNode.next = null;
return deleteToNode;
}
for (int i = 0; i < positionToRemove - 1; i++) {
node = node.next;
}
//์ง์ ์์น ๋
ธ๋ ์ญ์
ListNode deleteToNode = node.next;
node.next = deleteToNode.next;
deleteToNode.next = null;
return deleteToNode;
}
public boolean contains(ListNode head, ListNode nodeToCheck) {
while (head != null) {
if (head.data == nodeToCheck.data) {
return true;
}
head = head.next;
}
return false;
}
public void print(ListNode node) {
while (node != null) {
System.out.print(node.data);
node = node.next;
}
}
}
Stack์ ๊ตฌํํ์ธ์
- int ๋ฐฐ์ด์ ์ฌ์ฉํด์ ์ ์๋ฅผ ์ ์ฅํ๋ Stack์ ๊ตฌํํ์ธ์
- void push(int data)๋ฅผ ๊ตฌํํ์ธ์
- int pop()์ ๊ตฌํํ์ธ์
public class Stack {
private int top = 0;
private int StackArr[];
public Stack(int size) {
StackArr = new int[size];
}
public void push(int data) {
top++;
StackArr[top] = data;
}
public int pop() {
int ret = StackArr[top];
top--;
return ret;
}
public void print() {
for (int i = top; i > 0; i--) {
System.out.println("|" + StackArr[i] + "|");
}
System.out.println("ใ
ก");
}
}
์์ ๋ง๋ ListNode๋ฅผ ์ฌ์ฉํด์ Stack์ ๊ตฌํํ์ธ์
- ListNode head๋ฅผ ๊ฐ์ง๊ณ ์๋ ListNodeStack ํด๋์ค๋ฅผ ๊ตฌํํ์ธ์
- void push(int data)๋ฅผ ๊ตฌํํ์ธ์
- int pop()์ ๊ตฌํํ์ธ์
public class ListNodeStack {
int top;
ListNode node;
public ListNodeStack() {
this.node = null;
this.top = -1;
}
public void push(int data) {
ListNode pushNode = new ListNode(data);
if (node == null) {
node = new ListNode(data);
top++;
} else {
node = node.add(node, pushNode, ++top);
}
}
public int pop() {
if (top == -1) {
System.out.println("Empty");
return top;
}
return node.remove(node, top--).data;
}
public void print(ListNode node) {
while (node != null) {
System.out.print(node.data);
node = node.next;
}
}
}