본문 바로가기
공부/자바 (Java)

[Java] 컬렉션 프레임 워크 (List 인터페이스, Stack, Queue)

by Lagooni 2022. 1. 6.

컬렉션 프레임 워크란?

  • 프로그램 구현에 필요한 자료구조와 알고리즘을 구현해 놓은 라이브러리이다.
  • java.util 패키지에 구현되어 있다.
  • 개발에 소요된느 시간을 절약하고 최적화된 라이브러리를 사용할 수 있다.
  • Collection 인터페이스와 Map 인터페이스로 구성됨.

Collection 인터페이스

하나의 객체 관리를 위해 선언된 인터페이스로 필요한 기본 메서드가 선언되어 있다. 하위에 List, Set 인터페이스가 있다.

Map 인터페이스

  • 쌍으로 이루어진 객체를 관리하는데 필요한 여러 메서드가 선언되어 있다.
  • Map을 사용하는 객체는 Key-Value 쌍으로 되어 있고, Key는 중복될 수없다.

List 인터페이스

  • Collection 하위 인터페이스이다.
  • 객체를 순서에 따라 저장하고 관리하는데 필요한 메서드가 선언된 인터페이스.
  • 배열의 기능을 구현하기 위한 메서드가 선언됨.
  • ArrayList, LinkedList, Vector

ArrayList 와 LinkedList

둘 다 자료의 순차적 구조를 구현한 클래스이다.

ArrayList는 배열을 구현한 클래스로 논리적 순서와 물리적 순서가 동일하다.

LinkedList는 논리적으로 순차적인 구조지만, 물리적으로는 순차적이지 않을 수 있다.

LinkedList의 자료 추가와 삭제

import java.util.LinkedList;

public class LinkedListTest {
    public static void main(String[] args) {

        LinkedList<String> myList = new LinkedList<String>();

        myList.add("A");
        myList.add("B");
        System.out.println(myList);
        // [A, B]

        myList.add(1, "C");
        System.out.println(myList);
        // [A, C, B]

        myList.removeLast();
        System.out.println(myList);
        // [A, C]

    }
}

Stack 구현

  • Last In First Out(LIFO): 맨 마지막에 추가 된 요소가 가장 먼저 꺼내짐
  • 이미 구현된 클래스가 제공
  • ArrayList나 LinkedList로 구현할 수 있다.

ArrayList로 직접구현 하는 경우

import java.util.ArrayList;

class MyStack{

    private ArrayList<String> arrayStack = new ArrayList<String>();

    public void push(String data){
        arrayStack.add(data);
    }
    public String pop(){
        int len = arrayStack.size();
        if(len == 0){
            System.out.println("스택이 비어있습니다.");
            return null;
        }
        return arrayStack.remove(len-1);
    }
}

public class StackTest {
    public static void main(String[] args) {
        MyStack stack = new MyStack();

        stack.push("A");
        stack.push("B");
        stack.push("C");

        System.out.println(stack.pop());
        System.out.println(stack.pop());
        System.out.println(stack.pop());
        System.out.println(stack.pop());
    }
}

java.util.Stack에 이미 구현되어 있는 스택라이브러리를 사용하면 된다.

Queue

  • First In First Out(FIFO): 먼저 저장된 자료가 먼저 꺼내짐.
  • 스택과 마찬가지로 java.util.Queue에 구현되어 있는 라이브러리를 사용하면 된다.
  • 큐는 LinkedList를 활용하여 생성한다.
  • Queue와 LinkedList가 다 import되어 있어야함.

  예외가 발생하는 경우 예외를 리턴함 성공 실패의 T/F를 리턴함
삽입 add(e) offer(e)
삭제 remove() poll()
검사 element() peek()
import java.util.LinkedList;
import java.util.Queue;

public class QueueTest {
    public static void main(String[] args) {

        Queue<String> queue = new LinkedList<String>();
        queue.offer("A");   // queue에 A추가
        queue.offer("B");   // queue에 B추가
        queue.offer("C");   // queue에 C추가
        System.out.println(queue);
        queue.poll();   //queue의 첫번째 값을 반환하고 제거
        System.out.println(queue);
        queue.remove(); //queue의 첫번째 값을 제거
        System.out.println(queue);
        queue.peek();   // queue 검사
        System.out.println(queue);
        queue.clear();  // queue 초기화
        System.out.println(queue);
    }
}
// 결과
//[A, B, C]
//[B, C]
//[C]
//[C]
//[]

댓글