LinkedList, Stack, Queue, Deque, PriorityQueue 사용법 정리
2024. 7. 4. 14:26ㆍJAVA
LinkedList
노드를 연결해 리스트처럼 사용하는 컬랙션
데이터의 삽입, 삭제에 빠른 성능을 보이지만 특정 요소에 접근하는 성능은 ArrayList에 비해 떨어진다. 뒤에서 사용할 stack, queue, dequeue, priorityQueue의 근간이 되는 컬랙션이다.
import java.util.*;
import java.lang.*;
import java.io.*;
class Main {
public static void main(String[] args) {
LinkedList<Integer> link_list = new LinkedList<>();
link_list.add(1); // 값 넣기
link_list.add(2);
link_list.add(3);
link_list.add(4);
for (Integer number : link_list) {
System.out.println(number);
}
System.out.println("-----------");
System.out.println(link_list.getFirst()); // 처음 값 반환
System.out.println(link_list.getLast()); // 마지막 값 반환
System.out.println("-----------");
link_list.addFirst(5); // 첫번째에 값을 삽입
link_list.addLast(0); // 마지막에 값을 삽입
System.out.println(link_list.getFirst());
System.out.println(link_list.getLast());
System.out.println("-----------");
link_list.remove(0); // n 값 제거
System.out.println(link_list.getFirst());
System.out.println(link_list.contains(0)); // n 값 유무 반환 true : false
System.out.println(link_list.contains(5));
System.out.println("-----------");
Iterator it = link_list.iterator(); // 값이 존재하면 출력
while(it.hasNext()) {
Object num = it.next();
System.out.println(num);
}
}
}
Stack
스택은 값을 쌓아 만드는 데이터 구조라고 할 수 있다. Last in First out 구조로 처음 들어온 값이 뒤로 점점 밀리고 데이터 추출 시 마지막에 들어온 데이터가 먼저 추출 된다.
import java.util.*;
import java.lang.*;
import java.io.*;
class Main {
public static void main(String[] args) {
Stack<Integer> stack = new Stack<>();
stack.push(1); // n 값 삽입
stack.push(2);
stack.push(3);
System.out.println(stack);
System.out.println("---------");
System.out.println(stack.pop()); // 값을 추출 후 제거
System.out.println("---------");
System.out.println(stack.peek()); // 값만 추출 제거 X
System.out.println("---------");
System.out.println(stack.isEmpty()); // 스택의 공백 여부 반환 true : false
System.out.println("---------");
System.out.println(stack.search(2)); // 값이 있는지 탐색 index : -1
System.out.println(stack.search(0)); // 없는 값이므로 -1
System.out.println("---------");
System.out.println(stack.contains(2)); // 값이 있는지 탐색 true : false
}
}
Queue
First in First out 선입선출 형태로 먼저 들어온 값이 먼저 출력되는 형태이다.
import java.util.*;
import java.lang.*;
import java.io.*;
class Main {
public static void main(String[] args) {
Queue<Integer> q = new LinkedList<>();
q.add(1); // n 값 삽입
q.add(2);
q.add(4);
q.add(6);
q.add(8);
q.add(10);
System.out.println(q);
System.out.println(q.offer(12)); // n 값 삽입
System.out.println("-----------");
System.out.println(q.poll()); // 값을 추출 후 제거
System.out.println("-----------");
System.out.println(q.peek()); // 값 추출 후 제거 X
System.out.println("-----------");
System.out.println(q);
System.out.println("-----------");
System.out.println(q.isEmpty()); // 값 유무 반환 true : false
System.out.println("-----------");
System.out.println(q.contains(2)); // 값 존재 여부 반환 true : false
System.out.println("-----------");
q.clear(); // 값 초기화
System.out.println(q);
}
}
Deque
stack, queue가 동시에 사용할 수 있는 인터페이스이다. 말 그대로 양쪽으로 입출력이 가능하다.
import java.util.*;
import java.lang.*;
import java.io.*;
class Main {
public static void main(String[] args) {
Deque<Integer> dq = new LinkedList<>();
dq.addFirst(1); // stack push
dq.addFirst(2);
dq.addLast(3); // queue push
dq.addLast(4);
System.out.println(dq);
System.out.println(dq.pollFirst()); // stack poll
System.out.println(dq.pollLast()); // queue poll
System.out.println(dq);
System.out.println(dq.peekFirst()); // stack peek
System.out.println(dq.peekLast()); // queue peek
}
}
우선순위 큐 priorityQueue
위에서 사용한 queue와 다르게 값들의 우선 순위가 부여되며 해당 값을 기준으로 정렬된다. 기본적으로 오름차순으로 정렬되며 별도의 조건을 정의하기 위해서는 Comparable 인터페이스를 구현해 copare 메서드 로직을 작성해 우선순위를 변경할 수 있다.
import java.util.*;
class Main {
public static void main(String[] args) {
// Default
PriorityQueue<Integer> pqAsc = new PriorityQueue<>();
pqAsc.offer(1); // n 값 삽입
pqAsc.offer(6);
pqAsc.offer(8);
pqAsc.offer(4);
System.out.println("오름차순");
while(!pqAsc.isEmpty()) {
System.out.println("pqAsc = " + pqAsc.poll());
}
// 내림차순 정의하기 위한 compare
PriorityQueue<Integer> pqDesc = new PriorityQueue<>(new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o2 - o1;
}
});
pqDesc.offer(1);
pqDesc.offer(6);
pqDesc.offer(8);
pqDesc.offer(4);
System.out.println("\n내림차순");
while(!pqDesc.isEmpty()) {
System.out.println("pqDesc = " + pqDesc.poll());
}
}
}
'JAVA' 카테고리의 다른 글
[JAVA] 배열, ArrayList 내림차순, 오름차순 정렬 (0) | 2023.12.10 |
---|---|
[JAVA] HashMap, HashSet, TreeMap, TreeSet 사용 방법 (0) | 2023.12.02 |
[JAVA] 특정 문자열 제거하기, 연속된 문자열 (0) | 2023.11.12 |
[JAVA] Array, List, ArrayList 개념 정리 (0) | 2023.10.23 |
[JAVA] 약수 구하기 (2) | 2023.10.23 |