Java & Kotlin

[JAVA] ์ปฌ๋ ‰์…˜ ์ •๋ฆฌ

mangdo 2021. 8. 12. 15:36

๐Ÿ’ก ์ปฌ๋ ‰์…˜?

์ž๋ฐ”์—์„œ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค์ด๋‹ค.

์ปฌ๋ ‰์…˜์„ ๊ตฌํ˜„ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ์—๋Š” 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
        
    }
}