본문 바로가기

명사 美 비격식 (무리 중에서) 아주 뛰어난[눈에 띄는] 사람[것]

JAVA

LIFO인 Stack스텍, FIFO인 Queue큐, PriorityQueue와 Deque

Stack과 Queue

스택은 마지막에 저장한 데이터를 가장 먼저 꺼내는 LIFO

큐는 처음에 저장한 데이터를 가장 먼저 꺼내게 되는 FIFO

스텍에는 ArrayList와같은 배열기반, 큐는 LinkedList로 구현하는 것이 적합하다.

https://standout.tistory.com/90

 

메모리영역, 힙과 스택

메모리는 크게 힙과 스택으로 나뉠 수 있는데, 프로그램실행시 변수 등이 선언되었을때 메모리에 저장된다는 것을 확인했었다. https://standout.tistory.com/89 변수선언이란? 변수선언이란 컴퓨터의

standout.tistory.com

 

 

boolean empty()

스택이 비어 있는지 여부를 확인합니다. 비어있으면 `true`를 반환하고, 그렇지 않으면 `false`를 반환합니다.

Stack<String> stack = new Stack<>();
boolean isEmpty = stack.empty();
System.out.println(isEmpty); // true

 

Object peek()

스택의 맨 위에 있는 요소를 반환합니다. 제거하지 않습니다.

Stack<String> stack = new Stack<>();
stack.push("apple");
stack.push("banana");

String topElement = stack.peek();
System.out.println(topElement); // banana

 

Object pop()

스택의 맨 위에 있는 요소를 제거하고 반환합니다.

Stack<String> stack = new Stack<>();
stack.push("apple");
stack.push("banana");

String poppedElement = stack.pop();
System.out.println(poppedElement); // banana

 

Object push(Object item)

스택의 맨 위에 요소를 추가합니다.

Stack<String> stack = new Stack<>();
stack.push("apple");
stack.push("banana");
System.out.println(stack); // [apple, banana]

 

int search(Object o)

스택에서 주어진 요소를 찾아 해당 위치(인덱스)를 반환합니다. 찾지 못하면 `-1`을 반환합니다.

Stack<String> stack = new Stack<>();
stack.push("apple");
stack.push("banana");

int position = stack.search("apple");
System.out.println(position); // 2

 

 

 

 

 

boolean add(Object o)

큐에 요소를 추가합니다. 성공하면 `true`를 반환합니다.

Queue<String> queue = new LinkedList<>();
boolean added = queue.add("apple");
System.out.println(added); // true

 

Object remove()

큐의 맨 앞에 있는 요소를 제거하고 반환합니다.

Queue<String> queue = new LinkedList<>();
queue.add("apple");
queue.add("banana");

String removedElement = queue.remove();
System.out.println(removedElement); // apple

 

Object element()

큐의 맨 앞에 있는 요소를 반환합니다.

Queue<String> queue = new LinkedList<>();
queue.add("apple");
queue.add("banana");

String firstElement = queue.element();
System.out.println(firstElement); // apple

 

boolean offer(Object o)

큐에 요소를 추가합니다. 공간이 부족하여 추가할 수 없다면 `false`를 반환합니다.

Queue<String> queue = new LinkedList<>();
boolean offered = queue.offer("apple");
System.out.println(offered); // true

 

Object poll()

큐의 맨 앞에 있는 요소를 제거하고 반환합니다.

Queue<String> queue = new LinkedList<>();
queue.add("apple");
queue.add("banana");

String polledElement = queue.poll();
System.out.println(polledElement); // apple

 

Object peek()

큐의 맨 앞에 있는 요소를 반환합니다. 제거하지 않습니다.

Queue<String> queue = new LinkedList<>();
queue.add("apple");
queue.add("banana");

String peekedElement = queue.peek();
System.out.println(peekedElement); // apple

 

 

 

PriorityQueue

Queue인터페이스의 구현체 중의 하나

저장한 순서에 관계없이 우선순위가 높은것부터 꺼낸다.

null저장시 에러가 발생한다.

저장공간으로 배열을 사용하며 삿 요소를 힙이라는 자료구조의 형태로 저장한다.

PriorityQueue<Integer> priorityQueue = new PriorityQueue<>();
priorityQueue.add(3);
priorityQueue.add(1);
priorityQueue.add(2);

System.out.println(priorityQueue.poll()); // 1
System.out.println(priorityQueue.poll()); // 2
System.out.println(priorityQueue.poll()); // 3

 

 

Deque

Queue의 변형

Deque는 Queue의 변형으로, "Double Ended Queue"의 약자

한쪽 끝으로만 추가/삭제 할 수 있는 Queue와 달리 Deque는 양쪽 끝에 추가/삭제가 가능하다.

Deque의 조상은 Queue 구현체로는 ArrayDeque와 LinkedList가 있다.

Deque<String> deque = new LinkedList<>();
deque.addFirst("first");
deque.addLast("last");

System.out.println(deque.pollFirst()); // first
System.out.println(deque.pollLast()); // last