Stack과 Queue
스택은 마지막에 저장한 데이터를 가장 먼저 꺼내는 LIFO
큐는 처음에 저장한 데이터를 가장 먼저 꺼내게 되는 FIFO
스텍에는 ArrayList와같은 배열기반, 큐는 LinkedList로 구현하는 것이 적합하다.
https://standout.tistory.com/90
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
'JAVA' 카테고리의 다른 글
배열을 다루는데 유용한 메서드, Arrays (0) | 2024.02.05 |
---|---|
컬렉션에 저장된 요소를 접근하는데 사용되는 인터페이스 Iterator, Listterator, Enumeration (0) | 2024.02.05 |
모든 데이터가 서로 link한 형태로 구성된 LinkedList (0) | 2024.02.05 |
데이터의 저장순서가 유지되고 중복을 허용하는 ArrayList (0) | 2024.02.05 |
키과 값을 하나의 쌍으로 묵어서 저장하는 컬렉션 클래스, Map (0) | 2024.02.05 |