항해99/Java 문법 뽀개기

자바문법뽀개기(17) - 컬렉션(스택, 큐, ArrayDeque)

숲별 2022. 9. 28. 00:12
728x90

 

<스택Stack>

자료구조를 뜻함.

LIFO(Last In First Out)

 

 

import java.util.Stack;

public class Main {
    public static void main(String[] args) {
        Stack<Integer> stack = new Stack<>();
        stack.push(1);
        stack.push(3);
        stack.push(7);
        stack.push(5);
        System.out.println(stack);

        System.out.println(stack.peek());
        System.out.println("size: "+stack.size());
        System.out.println(stack.pop());
        System.out.println("size: "+stack.size());
    }
}

=>[1, 3, 7, 5]
5
size: 4
5
size: 3

 

.peek()은 제일 위에 뭔지 보기만 할게

.pop()은 제일 위에꺼 꺼내서 뭔지 볼게

 

 

 

System.out.println(stack.contains(1));
System.out.println(stack.empty());
stack.clear();
System.out.println(stack.isEmpty());

=>true
false
true

 

 

<큐Queue>

FIFO(First in First Out)

 

입력된 순서 있음

 

import java.util.LinkedList;
import java.util.Queue;

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);
    }
}

=>[1, 3, 5]
1
[3, 5, 7, 11, 9]
3
[3, 5, 7, 11, 9]

 

.poll은 스택에서 .pop과 같이 꺼내서 보는 것.

 

 

 

<ArrayDeque>

실무에서는 ArrayDeque를 많이 씀.

왜냐 기본스택이나 큐의 기능을 다 포함(pop, push, pull)하면서도 성능이 더 좋아서 사용

한쪽에서만 꺼내는 게 아니라 양쪽으로 다 꺼내고 넣을 수 있음.

 

import java.util.ArrayDeque;

public class Main {
    public static void main(String[] args) {
        ArrayDeque<Integer> arrayDeque = new ArrayDeque<>(); // 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을 반환합니다.
        System.out.println(arrayDeque);

        arrayDeque.offerLast(-1); // arrayDeque의 끝에 값을 삽입
        System.out.println(arrayDeque);
        System.out.println(arrayDeque.size()); // 7

        arrayDeque.push(22); // Stack에 있던 기능
        System.out.println(arrayDeque);
        System.out.println(arrayDeque.pop());
        System.out.println(arrayDeque);

        System.out.println(arrayDeque.peek());
        System.out.println(arrayDeque);
        System.out.println(arrayDeque.size());
       // arrayDeque.clear();
       // System.out.println(arrayDeque.isEmpty());



        System.out.println(arrayDeque.removeFirst()); // 첫번째 값을 제거하면서 그 값을 리턴
        System.out.println(arrayDeque.removeLast()); // 마지막 값을 제거하면서 그 값을 리턴
        System.out.println(arrayDeque);
        System.out.println(arrayDeque.size()); // 5

        System.out.println(arrayDeque.pollFirst()); // 첫번째 값을 반환 및 제거하면서 그 값을 리턴
        System.out.println(arrayDeque);
        System.out.println(arrayDeque.size()); // 4

        System.out.println(arrayDeque.pollLast()); // 마지막 값을 반환 및 제거하면서 그 값을 리턴
        System.out.println(arrayDeque);
        System.out.println(arrayDeque.size()); // 3

        System.out.println(arrayDeque.peekFirst()); // 첫번째 값을 반환, 제거하지 않음
        System.out.println(arrayDeque.peekLast()); // 마지막 값을 반환, 제거하지 않음
        System.out.println(arrayDeque.size()); // 3
    }
}

=>[4, 3, 2, 1]
[4, 3, 2, 1, 0]
[10, 4, 3, 2, 1, 0]
[10, 4, 3, 2, 1, 0, -1]
7
[22, 10, 4, 3, 2, 1, 0, -1]
22
[10, 4, 3, 2, 1, 0, -1]
10
[10, 4, 3, 2, 1, 0, -1]
7
10
-1
[4, 3, 2, 1, 0]
5
4
[3, 2, 1, 0]
4
0
[3, 2, 1]
3
3
1
3

 

계속 앞에 넣으니까 넣은 순서랑 반대로 배열.

 

 


List, Set은 .add이고 [ ]안에 담김.

Map은 .put이고 { }안에 담김.

Stack은 .push이고 [ ]안에 담김.

 Queue는 .add이고 [ ]안에 담김.

ArrayDeque는 .addFirst, .addLast이고 [ ]에 담김.

 

 

강의 자료 : https://www.notion.so/80db7f3685304ab3ac749e0e9cd29b30#1ec7e992c46b4e2c9f0c69d2fe41929e

 

[스파르타코딩클럽] 자바 문법 뽀개기

매 주차 강의자료 시작에 PDF파일을 올려두었어요!

www.notion.so