[JAVA] ์ปฌ๋ ์ ์ ๋ฆฌ
๐ก ์ปฌ๋ ์ ?
์๋ฐ์์ ์๋ฃ๊ตฌ์กฐ๋ฅผ ํํํ๋ ์ธํฐํ์ด์ค์ด๋ค.
์ปฌ๋ ์ ์ ๊ตฌํํ ์๋ฃ๊ตฌ์กฐ์๋ List, Stack, Queue, Set, Map์ด ์๋ค.
์๋ฐ์ ์๋ฃํ์ ํฌ๊ฒ ๊ธฐ๋ณธ ํ์ (primitive type)๊ณผ ์ฐธ์กฐ ํ์ (reference type)์ผ๋ก ๋๋์ด์ง๋ค. ๋ํ์ ์ผ๋ก ๊ธฐ๋ณธ ํ์ ์๋ char, int, float, double, boolean ๋ฑ์ด ์๊ณ ์ฐธ์กฐ ํ์ ์ class, interface ๋ฑ์ด ์๋ค. Collection์ ์๋ฃํ์๋ primitive ํ์ ์ ์ฌ ์ ์๋ค. primitive ํ์ ์ ํด๋นํ๋ wrapper class ๊ฐ ์กด์ฌํ๋ ๊ทธ๊ฒ์ ๋์ ์ฌ์ฉํ์.
List<Integer> ingeterList = new ArrayList<>();
List<String> stringList = new ArrayList<>();
๐ก List
: ์์๊ฐ ์๋ ๋ฐ์ดํฐ์ ์งํฉ์ด๋ฉฐ ๋ฐ์ดํฐ์ ์ค๋ณต์ ํ์ฉํ๋ค.
→ ArrayList, LinkedList, Stack ๋ฑ
public class Main {
public static void main(String[] args) {
List list = new ArrayList(10);
list.add(1);
list.add(5);
list.add(4);
list.add(11);
list.add(10); // ArrayList์ ๊ฐ ํ๊ฐ์ฉ ์
๋ ฅ
System.out.println(list); // [1,5,4,11,10]
Collections.sort(list); // list ์ ๋ ฌ
System.out.println(list); // [1,4,5,10,11]
System.out.println(list.size()); // arrayList์ ํฌ๊ธฐ ์ถ๋ ฅ
arrayList.remove(4); // ์ธ๋ฑ์ค๋ฅผ ํ์ฉํ์ฌ ํด๋นํ๋ ๊ฐ ์ ๊ฑฐ
System.out.println(list);
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i)); // get์ ์ด์ฉํ์ฌ ๊ฐ 1๊ฐ์ฉ ์ถ๋ ฅ
}
// for each๋ฌธ
for (int current : list) {
System.out.println(current);
}
}
}
๐ก Set
: ์์๋ฅผ ์ ์งํ์ง ์๋ ๋ฐ์ดํฐ์ ์งํฉ์ด๋ฉฐ ๋ฐ์ดํฐ์ ์ค๋ณต์ ํ์ฉํ์ง ์๋๋ค.
→ HashSet, TreeSet ๋ฑ
public class Main {
public static void main(String[] args) {
Set<String> stringSet = new HashSet<>();
stringSet.add("LA");
stringSet.add("LA"); // ๋๊ฐ๋ฅผ ๋ฃ์ด๋ ํ๋๋ง ์ ์ฅํจ
stringSet.add("New York");
stringSet.add("LasVegas");
stringSet.add("San Francisco");
stringSet.add("Seoul");
System.out.println(stringSet); // ์์๊ฐ ์ง์ผ์ง์ง ์์
stringSet.remove("Seoul"); // ์ธ๋ฑ์ค๊ฐ ์กด์ฌํ์ง ์์. Seoul์ HashSet์์ ์ ๊ฑฐํจ
System.out.println(stringSet);
ArrayList<String> target = new ArrayList<String>();
target.add("New York");
target.add("LasVegas"); //์ ๊ฑฐํ ํญ๋ชฉ์ ArrayList์ ์ฝ์
stringSet.removeAll(target); //์ ๊ฑฐํญ๋ชฉ์ ์ฝ์
๋ ๋์๋ค์ ์ญ์
System.out.println(stringSet);
System.out.println("LA๊ฐ ํฌํจ๋์ด์๋๊ฐ? " + stringSet.contains("LA"));
System.out.println("LA๊ฐ ํฌํจ๋์ด์๋๊ฐ? " + stringSet.contains("LasVegas"));
// LA๊ฐ HashSet์ ํฌํจ๋์ด์์ผ๋ฉด true๋ฅผ, ๊ทธ๋ ์ง ์์ผ๋ฉด false๋ฅผ ๋ฐํํฉ๋๋ค.
System.out.println("ํ์ฌ HashSet์ ํฌ๊ธฐ๋ : " + stringSet.size() + "์
๋๋ค.");
stringSet.clear();//HashSet์ ๋ชจ๋ ์์ดํ
๋ค์ ์ญ์ ํฉ๋๋ค.
System.out.println(stringSet);
}
}
๐ก Map
: ํค(key)์ ๊ฐ(value)์ ์์ผ๋ก ์ด๋ฃจ์ด์ง ๋ฐ์ดํฐ์ ์งํฉ์ด๋ค.
: ํค์ ๊ฐ์ ํตํ์ฌ ํด์ฑ(hashing)์ ๊ฐ๋ฅํ๊ฒ ํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ํ๋๋ฐ ๋ฐ์ด๋ ์ฑ๋ฅ์ ๋ณด์ฌ์ค๋ค.
: ์์๋ ์ ์ง๋์ง ์์ผ๋ฉฐ ํค๋ ์ค๋ณต์ ํ์ฉ๋์ง ์๊ณ ๊ฐ์ ์ค๋ณต์ ํ์ฉํ๋ค.
→ HashMap, TreeMap ๋ฑ
public class Main {
public static void main(String[] args) {
Map<Integer, String> map = new HashMap<>();
map.put(1, "apple");
map.put(2, "berry");
map.put(3, "cherry");
System.out.println(map);
System.out.println("1 in map: " + map.get(1)); // 1์ ์ธ๋ฑ์ค ์๋๊ณ key!!
map.remove(2); // ์ธ๋ฑ์ค ์๋๊ณ key!
System.out.println(map);
System.out.println(map.containsKey(2));
System.out.println(map.containsValue("cherry"));
map.clear();
System.out.println(map);
}
}
๐ก Stack
: ๋ง์ง๋ง์ ๋ฃ์ ๋ฐ์ดํฐ๋ฅผ ๋จผ์ ๊บผ๋ด๋ ์๋ฃ๊ตฌ์กฐ์ด๋ค. LIFO(Last In First Out)
→ Stack, ArrayDeque ๋ฑ
public class Main {
public static void main(String[] args) {
Stack<Integer> stack = new Stack<>();
stack.push(1);
stack.push(3);
stack.push(5);
stack.push(7);
System.out.println(stack); // Stack์ ์ถ๋ ฅ
System.out.println(stack.peek()); // Stack์ ๊ฐ์ฅ ์๋จ ๊ฐ์ ์ถ๋ ฅํ๋ค.(์ญ์ ๋ ํ์ง ์์)
stack.pop(); // Stack์ ๊ฐ์ฅ ์๋จ ๊ฐ์ ์ ๊ฑฐ
System.out.println(stack);
System.out.println(stack.size()); // Stack์ ํฌ๊ธฐ๋ฅผ ๋ฐํ
System.out.println(stack.contains(1)); // Stack์ 1์ด๋ผ๋ ๊ฐ์ด ์์ผ๋ฉด true๋ฅผ, ๊ทธ๋ ์ง ์์ผ๋ฉด false๋ฅผ ๋ฐํ
System.out.println(stack.empty()); // STack์ด ๋น์ด์์ผ๋ฉด true๋ฅผ, ๊ทธ๋ ์ง ์์ผ๋ฉด false๋ฅผ ๋ฐํ
System.out.println(stack);
}
}
๐ก Queue
: ๋จผ์ ๋ฃ์ ๋ฐ์ดํฐ๋ฅผ ๋จผ์ ๊บผ๋ด๋ ์๋ฃ๊ตฌ์กฐ์ด๋ค. FIFO(First In First Out)
→ Queue, ArrayDeque ๋ฑ
public class Main {
public static void main(String[] args) {
Queue<Integer> queue = new LinkedList<>();
queue.add(1);
queue.add(3);
queue.add(5); //Queue์ ๊ฐ ์ฝ์
System.out.println(queue); // Queue ์ถ๋ ฅ
System.out.println(queue.poll()); // Queue์์ ๊ฐ์ฒด๋ฅผ ๊บผ๋ด์ ๋ฐํ
queue.add(7);
queue.add(11);
queue.add(9);
System.out.println(queue);
System.out.println(queue.peek()); // Queue์์ ์ญ์ ์์ด ์์๋ฅผ ๋ฐํ
System.out.println(queue);
}
}
๐ก ArrayDeque
: ์ ๋์์ ์ฝ์ ๊ณผ ์ญ์ ๊ฐ ์ด๋ฃจ์ด์ง๋ ์๋ฃ๊ตฌ์กฐ์ด๋ค.
: ์ค๋ฌด์์๋ ๋จ์ํ Stack, Queue ํด๋์ค ๋์ ์ ArrayDeque ๋ง์ด ์ฌ์ฉํ๋ค๊ณ ํ๋ค. ๊ธฐ๋ณธ Stack, Queue์ ๊ธฐ๋ฅ์ ๋ชจ๋ ํฌํจํ๋ฉด์๋ ์ฑ๋ฅ์ด ๋ ์ข๊ธฐ ๋๋ฌธ์ด๋ค.
public class Main {
public static void main(String[] args) {
ArrayDeque<Integer> arrayDeque = new ArrayDeque<>();
arrayDeque.addFirst(1);
arrayDeque.addFirst(2);
arrayDeque.addFirst(3);
arrayDeque.addFirst(4); // arrayDeque์ ์์ ๊ฐ์ ์ฝ์
System.out.println(arrayDeque);
arrayDeque.addLast(0); // arrayDeque์ ๋์ ๊ฐ์ ์ฝ์
System.out.println(arrayDeque);
arrayDeque.offerFirst(10);
// addFirst์ ๋น์ทํ์ง๋ง ํ์ ํฌ๊ธฐ ๋ฌธ์ ๊ฐ ์๊ธธ ๋,
// offerFirst๋ false๋ฅผ, addFrist๋ exception์ ๋ฐํํจ
arrayDeque.offerLast(-1); // arrayDeque์ ๋์ ๊ฐ์ ์ฝ์
System.out.println(arrayDeque);
System.out.println(arrayDeque.size()); // 7
System.out.println(arrayDeque.removeFirst()); // ์ฒซ๋ฒ์งธ ๊ฐ์ ์ ๊ฑฐํ๋ฉด์ ๊ทธ ๊ฐ์ ๋ฆฌํด
System.out.println(arrayDeque.removeLast()); // ๋ง์ง๋ง ๊ฐ์ ์ ๊ฑฐํ๋ฉด์ ๊ทธ ๊ฐ์ ๋ฆฌํด
System.out.println(arrayDeque.pollFirst()); // ์ฒซ๋ฒ์งธ ๊ฐ์ ๋ฐํ ๋ฐ ์ ๊ฑฐํ๋ฉด์ ๊ทธ ๊ฐ์ ๋ฆฌํด
System.out.println(arrayDeque.size()); // 4
System.out.println(arrayDeque.pollLast()); // ๋ง์ง๋ง ๊ฐ์ ๋ฐํ ๋ฐ ์ ๊ฑฐํ๋ฉด์ ๊ทธ ๊ฐ์ ๋ฆฌํด
System.out.println(arrayDeque.peekFirst()); // ์ฒซ๋ฒ์งธ ๊ฐ์ ๋ฐํ, ์ ๊ฑฐํ์ง ์์
System.out.println(arrayDeque.peekLast()); // ๋ง์ง๋ง ๊ฐ์ ๋ฐํ, ์ ๊ฑฐํ์ง ์์
System.out.println(arrayDeque.size()); // 3
}
}