💻IT/Java

[Java] Deque 자료 구조 (LinkedList 메소드)

gom20 2021. 11. 15. 11:03

Deque 구현체로 ArrayDeque와 LinkedList 를 주로 사용한다.

LinkedList에 값을 넣고 뽑기 위한 많은 메소드를 있는데, 헷갈리는 점이 있어서 정리한다.

 

Deque란?

(deque, "deck"과 발음이 같음 ← double-ended queue)은 양쪽 끝에서 삽입과 삭제가 모두 가능한 자료 구조의 한 형태이다. 두 개의 포인터를 사용하여, 양쪽에서 삭제와 삽입을 발생시킬 수 있다. 와 스택을 합친 형태로 생각할 수 있다. (위키백과, 우리 모두의 백과사전.)

 

예제1. First에 넣어볼까?

LinkedList<Integer> test = new LinkedList<Integer>();
test.offerFirst(1);
test.offerFirst(2);
test.offerFirst(3);
System.out.println(test.peekFirst());
System.out.println(test.peekLast());

for(int t : test){
    System.out.print(t + " ");
}

출력:

3
1
3 2 1 

 

offerFirst(1)
First 입/출구 1 Last 입/출구
offerFirst(2)
First 입/출구 2 1 Last 입/출구
offerFirst(3)
First 입/출구 3 2 1 Last 입/출구

peekFirst() = 3

peekLast() = 1

 

예제2. First, Last 둘다 넣어보자

LinkedList<Integer> test1 = new LinkedList<Integer>();
test1.offerLast(1);
test1.offerLast(2);
test1.offerFirst(3);
test1.offerFirst(4);
System.out.println(test1.peekFirst());
System.out.println(test1.peekLast());

for(int t : test1){
    System.out.print(t + " ");
}

출력:

4
2
4 3 1 2

offerLast(1)
First 입/출구 1 Last 입/출구
offerLast(2)
First 입/출구 1 2 Last 입/출구
offerFirst(3)
First 입/출구 3 1 2 Last 입/출구
offerFirst(4)
First 입/출구 4 3 1 2 Last 입/출구

peekFirst() = 4

peekLast() = 2

 

예제3. 그럼 add, offer, push 는 어디로 들어가는거지?

LinkedList<Integer> test2 = new LinkedList<Integer>();
test2.offerLast(1);
test2.offer(6);
test2.add(8);
test2.push(3);
for(int t : test2){
    System.out.print(t + " ");
}

출력:

3 1 6 8 

offerLast(1)
First 입/출구 1 Last 입/출구
offer(6)
First 입/출구 1 6 Last 입/출구
add(8)
First 입/출구 1 6 8 Last 입/출구
push(3)
First 입/출구 3 1 6 8 Last 입/출구

offer, add 는 Last

push는 First

 

예제4. 그럼 pop, poll 은?

System.out.println(test2.pop());
System.out.println(test2.poll());

pop() = 3 

poll() = 1

둘다 First 쪽에서 값을 뽑아온다. 

 

소스코드

import java.text.ParseException;
import java.util.LinkedList;

public class Main{

    public static void main(String[] args) throws ParseException {
        LinkedList<Integer> test = new LinkedList<Integer>();
        test.offerFirst(1);
        test.offerFirst(2);
        test.offerFirst(3);
        System.out.println(test.peekFirst());
        System.out.println(test.peekLast());

        for(int t : test){
            System.out.print(t + " ");
        }

        System.out.println();

        LinkedList<Integer> test1 = new LinkedList<Integer>();
        test1.offerLast(1);
        test1.offerLast(2);
        test1.offerFirst(3);
        test1.offerFirst(4);
        System.out.println(test1.peekFirst());
        System.out.println(test1.peekLast());

        for(int t : test1){
            System.out.print(t + " ");
        }

        System.out.println();

        LinkedList<Integer> test2 = new LinkedList<Integer>();
        test2.offerLast(1);
        test2.offer(6);
        test2.add(8);
        test2.push(3);
        for(int t : test2){
            System.out.print(t + " ");
        }
        System.out.println();
        System.out.println(test2.pop());
        System.out.println(test2.poll());
    }
}

'💻IT > Java' 카테고리의 다른 글

[Java] Java 8 Method Reference (메소드 참조)  (0) 2021.12.12
[Java] Java 8 Functional Interface  (0) 2021.12.10
[Java] Java 8 Optional  (0) 2021.12.09
[Java] Java 8 Stream API  (0) 2021.12.03
[Java] Convert Array to List / Convert List to Array  (0) 2021.10.18